gpt4 book ai didi

gcc - gcc 中链接器标志的正确顺序是什么?

转载 作者:行者123 更新时间:2023-12-01 13:46:16 25 4
gpt4 key购买 nike

通常,我会编译一个需要特定库的程序,例如数学,通过在需要它的源之后传递链接器标志,如下所示:

gcc foo.c -lm

但是,似乎旧版本的 gcc 与相反的顺序同样有效(我们称之为 BAD ORDER):
gcc -lm foo.c

如果我尝试编译的一些流行的开源项目没有使用后者,而我的版本 gcc,我不会担心。 (还是 ld 是问题所在?)仅适用于前一种情况(在我看来也是正确的)。

我的问题是:BAD ORDER 何时停止工作,为什么?似乎不支持它会破坏旧包。

最佳答案

when did the BAD ORDER stop working and why? It seems that not supporting it breaks legacy packages.



什么时候?

不确定,但我认为是 GCC 4.5 之前的版本。很久以前。随后, --as-needed默认情况下,该选项可用于共享库,
所以像静态库一样,它们必须在链接序列中出现在它们为其提供定义的对象之后。
这是对 gcc/g++/gfortran 的默认选项的更改。等工具驱动程序传递给 ld .

为什么?

对于非专业用户来说,默认情况下必须出现静态库是令人困惑的
后来他们在默认情况下共享库时为其提供定义的对象
不是 - 两者之间的差异通常被 -l<name> 所掩盖习俗
用于链接 libname.alibname.so .

这可能是一个无法预料的后果,不专业的用户
以前因为错误地认为海湾合作委员会有很多运气
[compile and] 链接命令符合正常的 Unix 模式:
command [OPTION...] FILE [FILE...]

例如
gcc -lthis -lthat -o prog foo.o bar.o

现在情况更糟了。

关于gcc - gcc 中链接器标志的正确顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35897290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com