gpt4 book ai didi

c - gcc 编译与链接器 - 差异

转载 作者:行者123 更新时间:2023-11-30 15:18:59 24 4
gpt4 key购买 nike

这将编译main.c并创建链接 .o使用 abc 静态文件库并动态地使用 xyz

gcc main.c -Wl,-Bstatic -labc -Wl,-Bdynamic -lxyz -o main

但我不确定其他一些组合:

  1. 这将编译main.cmain - 但是什么-lm在这种情况下会怎样?

    gcc main.c -o main -lm

  2. 这里我们使用-Wl这让我们为链接器提供一些选项:-Bstatic, -lm说它应该与 m 静态链接库(libm)-但是什么-Wl,-Bdynamic在这里做什么?它与哪个库相关?gcc main.c -o main -Wl,-Bstatic -lm -Wl,-Bdynamic

    gcc main.c -o main -Wl,-Bstatic -lm -Wl,-Bdynamic

  3. 什么-static flag在这里做什么?为什么是在main.c之前?

    gcc -static main.c -o main -lm

最佳答案

  1. -lm 将链接到 libm。默认情况下,gcc 将首先搜索共享库。如果未找到共享版本,它将搜索静态版本。
  2. 尾随的-Wl,-Bdynamic是为了确保使用标准库的共享版本(即libc)。
  3. -static 防止与共享库链接。它可以放置在命令行的任何位置,并且具有相同的效果。这与 -Wl,-Bstatic 不同,-static 适用于所有库的链接,而 -Wl,-Bstatic 仅适用于库在命令行中的后面。请注意,-static 也不同于 -Wl,-static。前者是 gcc 驱动程序选项并阻止所有动态链接。后者是一个 ld 选项,是 -Wl,-Bstatic 的别名。

关于c - gcc 编译与链接器 - 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30969816/

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