簡體   English   中英

使用Visual Studio 2008從x86編譯x64 dll

[英]Compiling x64 dll from x86 using Visual Studio 2008

我正在使用Visual Studio 2008將一些外部C ++代碼編譯到dll中。代碼被包裝在外部“ C”中。

由於我正在交叉編譯,因此請在32位計算機上創建一個64位dll。 我將x64用作“配置管理器”中的“活動解決方案平台”。

我的dll編譯並成功鏈接。 但是,當我在Dependency Walker(depends.exe)中打開它時,我發現有些奇怪:我的dll被標記為64位。 但是,我的dll取決於32位的C:\\ windows \\ system32 \\ ntdll.dll和C:\\ windows \\ system32 \\ kernel32.dll! 結果,Dependency Walker給了我以下錯誤:“錯誤:由於隱式依賴模塊中缺少導出功能,至少一個模塊的導入無法解析。錯誤:找到了具有不同CPU類型的模塊。”

這是怎么了?

預先感謝您的任何回答!

Dependency Walker會給您該錯誤,因為32位系統system32的dll文件是32位。 如果您在64位版本的Windows上運行它,它將可以正常工作。

也許誤會來自於system32的名稱? 它不一定包含32位文件-它包含與操作系統的位大小匹配的文件,因此在32位Windows sytem32包含32位dll,在64位Windows system32包含64位dll。

但是,它變得更加復雜-64位Windows可以運行32位進程,並且如果32位進程在64位版本的Windows上訪問system32,則將其重定向到SysWOW64 (是的system32包含64位dll,而SysWOW64包含32位dll)。

您的DLL取決於ntdll.dllkernel32.dll Dependency Walker嘗試根據LoadLibrary函數的查找規則找到它們。 它在system32目錄中找到它們,但是在32位系統上,它們是32位。

使用Dependency Walker的64位版本打開DLL的64位版本。 如果您的模塊已針對x64正確編譯,您將不再看到錯誤消息“錯誤:找到了具有不同CPU類型的模塊”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM