我对 Linux 编程还很陌生。你可以说我是一个 Windows 人。所以,我将我的项目移植到 Linux,这几乎让我发疯:我确定我已经用 -l 标志指定了所有依赖项,但我却收到“未解析的符号”错误。 然后我找到了这个主题,它解决了我的问题:Boost linking on Linux with GCC
谁能解释一下为什么顺序很重要,以及它到底有多重要?我很确定 MSVC 链接器不是这种情况...
最佳答案
一个简单的例子会让你明白为什么一次性 Unix 链接器关心顺序。
假设您有 main.o(由 main.cpp 生成)和库 libx.a(无依赖项)和 liby.a(依赖于名为 newRefX 的 libx)。
如果链接器按此顺序进行,那么链接器从 1 到 3 就没问题:
- main.o refX=undef, refY=undef
- liby.a refX=undef, refY=def, newRefX=undef
- libx.a refX=def, refY=def, newRefX=def
但是如果链接器按照这个顺序进行,你就会遇到 newRefX 的问题:
- main.o refX=undef, refY=undef
- libx.a refX=def, refY=undef,
- liby.a refX=def, refY=def, newRefX=undef
因此,您可以看到您需要最后一个最低级别的库(不依赖于其他库的库)。
关于linux - 为什么指定输入库的顺序很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8367888/