GCC对接受其论点的顺序非常挑剔:
# Works.
g++ Foo.cpp -L. -I. -lBar -o Foo
# Linker errors.
g++ -o Foo -I. -L. -lBar Foo.cpp
具体来说,命令行选项的排序要求是什么?
答案 0 :(得分:7)
库根据需要根据需要加载库,因此提供其他东西所需符号的库必须遵循其他内容。这是历史性的;可以说现代系统应该自动解决符号,合理地处理循环(这是规则的原因;你通过按顺序指定库并根据需要多次手动打破了依赖循环),但是g++
遵循传统规则所以它将与供应商ld
一起使用。 (GNU ld
在任何地方都不起作用,因此不可能依赖它来解决符号依赖循环。即使在GNU ld
工作的平台上也存在引导问题。)同样,其他面向链接器的选项必须以相对于它们影响的事物的正确顺序指定(例如,-L
选项必须位于存在于指定目录中的库之前;如果库在一个库中,这可能很重要目录阴影标准目录中的同名库。)