【发布时间】:2017-01-03 21:41:09
【问题描述】:
我正在尝试使用 Visual Studio 2012 编译一个测试程序,该程序应该链接到同事给我的 test.lib 文件。
编译在链接步骤停止并出现错误 LNK2019。缺少的符号是:
public: virtual __thiscall abc::Test::~Test(void)
使用实用程序dumpbin,我发现在 test.lib 中定义了以下符号:
public: virtual __cdecl abc::Test::~Test(void)
这两个函数有什么区别?我该如何解决这个编译问题?我是否缺少一些编译标志?
【问题讨论】:
-
你定义了析构函数吗?
-
您很可能使用不同的编译器选项编译您的测试程序,而不是您的同事编译他的库所使用的。调用约定的不同使我相信这一点。
-
@Raindrop7: 析构函数已定义
-
@PaulMcKenzie:你知道我应该检查哪些标志吗?
-
不仅仅是编译器选项。任何可能打开/关闭特定调用约定的预处理器符号也会影响正在发生的事情。您需要与您的同事协调并非常仔细地比较他/她是如何构建库的,以及您是如何构建应用程序代码的。静态库只不过是打包在单个文件中的目标代码。但是,该目标代码必须与生成的目标代码基本相同,就好像您已获取库的源文件之一并在您的应用程序中自己构建它一样。显然情况并非如此。
标签: c++ visual-studio linker cmake