簡而言之:在Visual C++ 2015上,我收到一個鏈接器錯誤,抱怨缺少鏈接器中存在的.lib文件中的符號。Visual C++鏈接器抱怨缺少不存在的符號
在很長:在命令行編譯和喜好的一些計劃與cl.exe時,我得到以下爲第一許多錯誤的:
main.obj : error LNK2001: unresolved external symbol "protected: static struct wxEventTable const wxApp::sm_eventTable" ([email protected]@@[email protected]@B)
AFAIK,這個長行說我的main.obj引用了一個符號?sm_eventTable @ wxApp @@ 1UwxEventTable @@ B關聯的函數,但是鏈接程序在我在命令行上提供的(long)列表中找不到這個符號。
我在/ MD模式下編譯。不知道這是否有幫助,傷害或者沒有重要性。
一個我用鏈接的文件是wxmsw31u_core.lib,做
DUMPBIN /頭wxmsw31u_core.lib> here.txt
給出了一個長文件containting以下
Version : 0
Machine : 8664 (x64)
TimeDateStamp: 56D46194 Mon Feb 29 16:19:48 2016
SizeOfData : 00000045
DLL name : wxmsw310u_core_vc140_x64.dll
Symbol name : [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable)
Type : data
Name type : name
Hint : 14083
Name : [email protected]@@[email protected]@B
從這我推斷wxmsw31u_core.lib這是一個「導入庫」:換句話說,這意味着這個庫不包含代碼,但只是指的是實際包含代碼的dll文件wxmsw310u_core_vc140_x64.dll。 ?
後者wxmsw310u_core_vc140_x64.dll文件確實提到sm_eventTable @ wxApp @@ 1UwxEventTable @@ B中我檢查:
DUMPBIN/EXPORTS wxmsw310u_core_vc140_x64.dll> here2.txt
給
14084 3703 0057F008 [email protected]@@[email protected]@B = [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable)
我注意到第一個數字等於前一個標題的提示加上一個。我想這是正常的?
我花了時間檢查上面的DLL,但AFAIK,在鏈接過程中不需要DLL(調用生成的.exe時需要)。總而言之,看起來一切都在那裏,它應該聯繫起來,所以我不知道這裏有什麼問題。
編輯
我部分地通過編譯自己的libary而不是使用的Windows通過提供的wxWidgets編譯binaires解決了這個問題:現在我可以編譯我的程序,一切都很好。
好吧,不是全部:最初的問題依然存在。我有一種情況,我試圖鏈接一個obj與一個lib來獲得一個exe,obj指的是一個符號,其錯亂的名字是在lib中逐字呈現的,鏈接器確實加載了obj和lib(使用/ VERBOSE確認),但鏈接器拒絕將該符號視爲「已解決」。爲什麼?
我會創建一個新的問題,我將要求解釋有待解決的條件。
謝謝您的回答。我的命令行的確具有/ MACHINE:X64和/ LIBPATH:「路徑到lib」(無論如何沒有lib鏈接器在前面的步驟停止)。 – Arnaud
@Arnaud'/ LIBPATH'應該是目錄的路徑,而不是庫文件本身 – Nikita
是的,這是正確的路徑 – Arnaud