简而言之:在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