【问题标题】:CMake fails to link nested libraryCMake 无法链接嵌套库
【发布时间】:2021-05-26 06:52:13
【问题描述】:

我正在尝试构建我的第一个 CMake 项目,但在 CXX executable NeuralNetLibrary 上失败了。

我在构建时收到undefined reference to FFLayer::test() 错误。 完整的项目在这里 https://github.com/JRazek/ConvolutionalNetLib。 请帮助我如何解决这个问题。

【问题讨论】:

    标签: c++ cmake linker


    【解决方案1】:

    原因是您缺少不同库项目之间的依赖关系。比如Net库在Net.cpp中使用了FFLayer中定义的函数,但是对应的target_link_libraries(Net PRIVATE FFLayer)缺失了。

    这会导致 CMake 以错误的顺序链接静态库,因为它假定没有顺序约束。

    如果您修复该问题,您会发现Layer 的析构函数仍会出现缺少符号错误,该错误未实现。您可以添加一个带有定义的 .cpp 文件,或者只是将 = default; 添加到现有声明中,在这两种情况下都会生成。

    【讨论】:

    • 它编译。谢谢。 :)