简而言之:在Visual C ++ 2015上,我收到一个链接器错误,抱怨我链接的.lib文件中没有符号。
总之:在使用cl.exe从命令行编译和喜欢某些程序时,我得到以下内容作为许多错误中的第一个:
main.obj : error LNK2001: unresolved external symbol "protected: static struct wxEventTable const wxApp::sm_eventTable" (?sm_eventTable@wxApp@@1UwxEventTable@@B)
AFAIK,这个长行说我的main.obj指的是一个符号?sm_eventTable @ wxApp @@ 1UwxEventTable @@ B关联的函数,但是链接器在(长)列表中找不到这个符号我在命令行上提供的库。
我在/ MD模式下编译。不知道这有什么帮助,伤害或不重要。
我链接的其中一个文件是wxmsw31u_core.lib并正在执行
dumpbin / headers wxmsw31u_core.lib> here.txt
提供包含以下内容的长文件
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 : ?sm_eventTable@wxApp@@1UwxEventTable@@B (protected: static struct wxEventTable const wxApp::sm_eventTable)
Type : data
Name type : name
Hint : 14083
Name : ?sm_eventTable@wxApp@@1UwxEventTable@@B
由此我推断wxmsw31u_core.lib这是一个"导入库" :换句话说,这意味着这个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 ?sm_eventTable@wxApp@@1UwxEventTable@@B = ?sm_eventTable@wxApp@@1UwxEventTable@@B (protected: static struct wxEventTable const wxApp::sm_eventTable)
我注意到第一个数字等于前一个标题的提示加一个。我想这是正常的吗?
我花时间检查上面的DLL但是AFAIK,在链接过程中不需要DLL(当你调用生成的.exe时需要它。)
总而言之,似乎一切都在那里,它应该联系起来,所以我无法确定这里的错误。
修改
我通过编译自己的libary而不是使用由wxWidgets提供的Windows编译的binaires来解决这个问题:我现在可以编译我的程序了,一切都很顺利。
嗯,不是全部:最初的问题仍然存在。我有一种情况,我试图将一个obj链接到一个lib来获取一个exe,obj指的是一个符号,其中的错误名称在lib中逐字存在,链接器确实加载了obj和lib(使用/ VERBOSE确认),然而链接器拒绝将符号视为"已解决"。为什么呢?
我将创建一个新问题,我将要求解释有待解决的条件。
答案 0 :(得分:0)
AFAIK,这条长线说我的main.obj指的是一个符号的函数?
是的,链接器无法在指定的路径上找到sm_eventTable@wxApp@@1UwxEventTable@@B
。
检查您是否正确设置了Additional Library Path
参数,并且您的应用程序的目标平台为/Machine:X64