我使用Visual Studio 2008將一些外部C++代碼編譯到dll,thirdpartycode.dll中。代碼被封裝在extern「C」中。使用Visual Studio 2008從x86編譯x64 dll:無法解析的外部__imp_符號
由於我正在交叉編譯,在我的32位機器上創建一個64位的DLL;我在「配置管理器」中將x64用作「主動解決方案平臺」。
我的thirdpartycode.dll編譯並鏈接成功。 接下來,我想創建另一個dll,其中包含調用thirdpartycode.dll的代碼: wrapper.dll。 正如名稱所示,它是一個簡化對thirdpartycode.dll中複雜API的某些調用的包裝。 然後我打算從C#程序調用wrapper.dll。我的問題是當我嘗試鏈接我的wrapper.dll時,我得到未解決的符號:-(。 對於thirdpartycode.dll中的每個函數,例如「func1」;我得到一個無法解析的外部符號「__imp_func1」 。使用的Dependency Walker我確認thirdpartycode.dll indeeed不出口「FUNC1」。
我待辦事項thirdpartycode.lib中的「其他的依賴」。我已經打開/冗長,可以看到thirdpartycode.lib搜索。
如果我重複這整個過程,但使用x86作爲「主動解決方案平臺」的東西很好用!?
任何想法出了什麼問題?
__imp_前綴來自哪裏? 這有點令人困惑,因爲對於故障排除,我會使用Dependency Walker將來自thirdpartycode.dll的導出符號與使用dumpbin的wrapper.obj中的所需符號進行比較。
在此先感謝您的任何答案!
什麼是未解決的符號名稱?他們是系統功能還是來自第三方代碼(即外部庫)? – rubenvb 2010-07-22 08:38:42
他們來自第三方代碼。 – 2010-07-22 08:59:23
對不起,我忘記提及第三方代碼使用Windows系統庫。 當我在Dependency Walker(depends.exe)中打開它時,我發現一些奇怪的東西:我的dll被標記爲64位。然而,我的DLL依賴於C:\ windows \ system32 \ ntdll.dll和C:\ windows \ system32 \ kernel32.dll這是32位!因此,Dependency Walker給我提供了以下錯誤:「錯誤:由於隱式依賴模塊中缺少導出函數,導致至少有一個模塊導入了未解析的錯誤。錯誤:找到了具有不同CPU類型的模塊。 – 2010-07-23 11:32:28