为什么Ubuntu的链接器使用 - 默认为需要? 使用GCC的Linux,当使用-l选项指定库时,并且不需要该库(在该库中没有引用任何符号),有时Linker会存储对该库的引用(

问题描述 投票:0回答:1
-l

选项指定库时,并且不需要该库(在该库中没有引用任何符号),有时链接器会存储对该库的引用(选项

--no-as-needed
),有时不会(选项
--as-needed
)。记录的(
man ld
)行为是包括库。因此,默认选项为
--no-as-needed
。 wo,在ubuntu上,似乎默认值为
--as-needed
你知道为什么吗?
llet的例子。考虑空的程序

man ld

,除了标准C库外,什么也没有引用:

test1.c

int main(int argc, char* argv[]) { }

ubuntu 24.10与GCC 14.2.0,我们得到了:

-lsrt
另一方面,在Fedora 41的GCC 14.2.1上,默认值与

gcc -c test1.c echo "=== default" gcc test1.o -lsrt -o test1 ldd test1 echo "=== --as-needed" gcc test1.o -Wl,--as-needed -lsrt -o test1 ldd test1 echo "=== --no-as-needed" gcc test1.o -Wl,--no-as-needed -lsrt -o test1 ldd test1
.

这个问题已经在2018年在这里得到了

,但没有答案。
    

/
=== default linux-vdso.so.1 (0x0000f2c7dae1c000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000f2c7dabe0000) /lib/ld-linux-aarch64.so.1 (0x0000f2c7dadd0000) === --as-needed linux-vdso.so.1 (0x0000ff893479c000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ff8934560000) /lib/ld-linux-aarch64.so.1 (0x0000ff8934750000) === --no-as-needed linux-vdso.so.1 (0x0000e80830bea000) libsrt.so.1.5 => /lib/aarch64-linux-gnu/libsrt.so.1.5 (0x0000e80830a90000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000e808308d0000) libcrypto.so.3 => /lib/aarch64-linux-gnu/libcrypto.so.3 (0x0000e80830200000) libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000e8082fe00000) libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000e80830820000) libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000e808307e0000) /lib/ld-linux-aarch64.so.1 (0x0000e80830ba0000) libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000e808307a0000) libzstd.so.1 => /lib/aarch64-linux-gnu/libzstd.so.1 (0x0000e80830140000)

/

--no-as-needed
-Schism于2013年与Debian发生
惠兹(Wheezy
默认情况下的链接器。随后,德比安(Debian)衍生的发行版(包括Ubuntu)跟随套房,而Fedora及其衍生产品保持了老式。
连接器(

--as-needed

)没有更改。区别是是否
默认情况下,发行版的GCC构建
--no-as-needed

将链接传递给链接器 在显式和隐式库(从而覆盖

列链接默认)之前。 debian为什么要这样去? 这里是理由。 如您自己的示例所示,您可以使用--as-needed

ubuntu shared-libraries ld
1个回答
0
投票
ld

链接 比

--as-needed
的工作更多。因此,有一个判断的权衡 可能有所不同
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.