【问题标题】:LNK2001 with Cmake static libraryLNK2001 与 Cmake 静态库
【发布时间】:2016-10-19 11:34:31
【问题描述】:

我正在努力链接到在另一个 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++ 专家,所以这可能很简单,但是任何人都可以提供帮助吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow。我将看看您使用库部署的头文件和构建库所使用的头文件的区别。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2018-03-18
    相关资源
    最近更新 更多