带链接器的gcc编译 - 差异

时间:2015-06-21 22:09:00

标签: c gcc linker

这将汇编main.c并将创建的.o文件与abc库静态链接,并与xyz动态链接

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

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

  1. 这会将main.c汇编为main - 但-lm在这种情况下会做什么?

    gcc main.c -o main -lm

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

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

  3. -static旗帜在这做什么?为什么在main.c之前呢?

    gcc -static main.c -o main -lm

1 个答案:

答案 0 :(得分:1)

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