2011-09-06 169 views
5

我有一個exe文件取決於libeay32.dll。兩者都編譯爲32位。Windows 7 64位不正確PATH當加載32位庫的32位exe

我已將exe複製到C:\ Program files(x86)\ app \ bin,並將dll複製到C:\ Program files(x86)\ app \ lib。 爲了確保正確的工作,我已將C:\ Program files(x86)\ app \ lib添加到路徑中。

在Windows 7 64位上,當我執行exe文件時,我得到了libeay32.dll未找到的錯誤。

對32位使用依賴關係walker,庫正確位於C:\ Program files(x86)\ app \ lib。 使用sysinternal進程資源管理器應用程序正確執行。 使用cmd也可以。 使用依賴walker 64位,我可以看到缺少的庫。 將這兩個文件複製到syswow64也可以很好地工作。

如果應用程序被編譯爲32位...

爲什麼心不是窗戶尋找32個庫? 如果目錄已經在路徑上,爲什麼沒有解決圖書館?

我的猜測是,W7忽略了路徑,但根據這個: http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx 它不應該!

爲什麼我不能運行我的exe文件位於路徑上的依賴? 我應該註冊圖書館還是什麼?

任何想法將不勝感激。

編輯:

程序將其正確啓動/從開始菜單 - >程序完成時,但不能直接在該.exe ...... WTF執行?

使用procmon中似乎試圖打開(注意缺少「「): 」C:\ Program Files文件(x86)的\ MYAPP \第三方\ OpenSSL的\ LIBEAY32.DLL「 但在其路徑正確(複查: 「C:\ Program Files文件(x86)的\ MYAPP \第三方\ OpenSSL的」)

ANSWER?: 是有訣竅的場景/臭蟲設置「C:\ Program Files文件(86) 「在路徑上,導致Windows試圖加載」C:\ Program Files文件(x86)「,而不是 ????(請參閱使用procmon沒有任何過濾器)

Windows 7 x64錯誤?

+0

據我所知,只查找PATH查找EXECUTABLE。一個Lib或DLL無法自行執行 - 只能支持另一個可執行文件。 – Arun

+2

@Arun - Windows確實使用路徑來定位DLL的。請參閱http://msdn.microsoft.com/en-us/library/7d83bc18.aspx – shf301

+0

我的不好,我收回。是的,它確實。非常感謝您糾正我的錯誤! – Arun

回答

0

您可以將lib移植到同一個目錄中,因爲它總是首先檢查。如果找到了,就使用它。 在Windows 64位系統上,您可以(未嘗試)也將庫移動到存儲32位版本的SystemWOW64文件夾,但我會推薦第一個版本。