CMake链接阶段问题

Vol*_*ire 5 c++ linker cmake

我目前正在构建一个相当大的应用程序,使用cmake生成跨平台构建脚本。在组合cmake构建脚本的过程中,我发现了gcc链接行排序的痛苦。

基本问题是以错误的顺序包含静态库会导致未使用的库符号被丢弃,随后的依赖库无法找到它们。

因此,我处于cmake生成可以正常编译的Visual Studio构建系统的情况,但是unix makefile会引发各种“未定义符号”错误。我已经解决了这个问题-在add_executable命令中,我两次包含了静态库。

我希望有一种更标准/更好的方式来解决此问题。由于我不是唯一的开发人员,并且大多数常规开发都是在Windows中完成的,所以我真的想要一个与链接顺序无关的CMake脚本。Windows开发人员只是不处理此链接顺序问题。最重要的是,弄清楚正确的顺序将非常困难-我没有那么容易获得的信息,并且有很多静态库(大约70个)。

在互联网上搜索后,我确实了解了-static和-dynamic标志,但是让CMake包含它们并不是显而易见的,gcc抱怨无法找到动态库。

无论如何,我欢迎有关如何做正确事情的建议。

Dan*_*zek 3

我认为这与其说是 CMake 问题,不如说是 GCC 行为。这个问题/答案应该会有所帮助:

GCC 中的链接器顺序

您必须硬着头皮修改 CMakeLists.txt 文件才能在 Linux 上正确链接。由于 Windows 开发人员不在乎,因此您不应该打扰他们。

最好的,
-丹