【发布时间】:2010-07-23 18:26:31
【问题描述】:
我目前正在构建一个相当大的应用程序,使用 cmake 生成跨平台构建脚本。在整理 cmake 构建脚本的过程中,我发现了 gcc 链接行排序的痛苦。
基本问题是,以错误的顺序包含静态库会导致未使用的库符号被丢弃,随后的依赖库无法找到。
因此,我处于 cmake 生成一个编译得很好的 Visual Studios 构建系统的情况,但是 unix makefile 会抛出各种“未定义符号”错误。我已经找到了解决方法 - 在 add_executable 命令中,我包含了两次静态库。
我希望有一种更标准/更好的方法来处理这个问题。因为我不是唯一的开发人员,而且大部分常规开发都是在 Windows 中完成的,所以我真的想要一个与链接顺序无关的 CMake 脚本。 Windows 开发人员只是不处理此链接顺序问题。最重要的是,找出正确的顺序将非常困难 - 我没有现成的信息,并且有很多静态库(70 左右)。
在互联网上搜索后,我确实了解了 -static 和 -dynamic 标志,但是让 CMake 包含它们并不明显,并且 gcc 抱怨无法找到动态库。
无论如何,我欢迎有关如何做正确事情的建议。
【问题讨论】: