gpt4 book ai didi

linux - gcc -static 会影响所有提供的库吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:16 25 4
gpt4 key购买 nike

gcc 的选项 -static 是只影响紧随其后的一个库还是影响命令行上提供的所有库?

g++ -static -lutils1 -lutils2

最佳答案

GGC 的 -static linkage option 阻止与共享库的链接。所以所有 链接所需的库必须是静态的。这链接器必须能够找到一个静态库来解析所有 -lname选项被传递,以及 GCC 静默的所有默认库的静态版本附加到链接。

这是 -static 的预期用途选项,尽管可以使其更加灵活。

海湾合作委员会的 -static选项只需让 GCC 传递选项 -static|-Bstatic 即可工作到链接器( ld ),位于生成的 ld 中的一个位置在所有库之前的命令行链接。

链接器 -static选项与 GCC 的含义不同。来自 the ld manual :

-Bstatic

-dn

-non_shared

-static

Do not link against shared libraries. This is only meaningful on platforms for which shared libraries are supported. he different variants of this option are for compatibility with various systems. You may use this option multiple times on the command line: it affects library searching for -l options which follow it.

(我的重点)

因此链接器的 -static|-Bstatic选项表示:除非另行通知,否则不要链接任何共享库。稍后指向 ld命令行你可以取消-static|-BStatic的效果使用选项 -Bdynamic , 哪个将允许再次链接动态库,从那时起,直到另行通知

与链接器不同,GCC 没有取消其 -static 效果的选项。选项。但是,GCC 允许您将任意选项传递给 ld , 通过 -Wl,<ld-options> .所以您可以实际上取消 GCC 的 -static稍后在命令行中的选项如下:

gcc -static -o prog main.o -lfoo -lbar -Wl,-Bdynamic -lgum ...

这将生成一个链接命令行,其中 -lfoo-lbar必须解决静态库但-lgum并且任何后续库都可以解析为像往常一样共享库或静态库。虽然如果你想“打开/关闭”在命令行的不同点上这样的动态链接,它会更自然不用GCC的-static选项,而是写等效的:

gcc -o prog main.o -Wl,-Bstatic -lfoo -lbar -Wl,-Bdynamic -lgum ...

关于linux - gcc -static 会影响所有提供的库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54145679/

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