Visual C ++链接器抱怨缺少一个不存在的符号

时间:2016-10-16 19:17:01

标签: visual-c++ linker-errors

简而言之:在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确认),然而链接器拒绝将符号视为"已解决"。为什么呢?

我将创建一个新问题,我将要求解释有待解决的条件。

1 个答案:

答案 0 :(得分:0)

  

AFAIK,这条长线说我的main.obj指的是一个符号的函数?

是的,链接器无法在指定的路径上找到sm_eventTable@wxApp@@1UwxEventTable@@B

检查您是否正确设置了Additional Library Path参数,并且您的应用程序的目标平台为/Machine:X64