带有Cmake静态库的LNK2001

时间:2016-10-19 11:34:31

标签: c++ visual-c++ cmake

我正在努力链接到另一个Visual C ++项目中使用CMake创建的静态库。我正在为库中的所有符号获取LNK2001未解决的符号错误。忘了链接图书馆?我真的不认为我有,因为我已经指定它作为一个绝对路径,并验证如果我更改名称我得到一个错误,它找不到库 - 所以它肯定在看它。

我使用DUMPBIN来查看符号名称,它们看起来与VC ++正在寻找的不同,例如。

(在静态库中)

??0Matrix@NEWMAT@@QAE@HH@Z (public: __thiscall NEWMAT::Matrix::Matrix(int,int))

(未解决的符号)

public: __cdecl NEWMAT::Matrix::Matrix(int,int)" (??0Matrix@NEWMAT@@QEAA@HH@Z)

注意装饰中的QAE和QEAA,库也有__thiscall而编译器正在寻找__cdecl

看起来调用约定可能是问题,但为什么它会有所不同,是否有编译器开关使其保持一致?

我已经浏览了项目属性并尝试使所有编译器选项相同但无济于事。不幸的是,我不是VC ++专家,所以它可能非常简单,但任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

好吧,我显然已经解决了这个问题,虽然我对我得到的错误感到困惑。似乎CMake库的目标是x86,而不是x64。当我尝试链接到同一组中的另一个库时,我发现了这一点,然后报告了有关不一致的机器类型的错误。修复了CMake以进行x64构建后,我注意到调用约定现在正如预期的那样,我没有未解析的符号。

有点不清楚为什么我没有在第一个库上得到机器类型错误,但这就是生活。