2015-06-21 64 views
0

这将编译main.c和链接创建.o文件静态与abc库和动态地xyzGCC编译与接头 - 差异

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 -o main.c中主要-Wl,-Bstatic -lm轮候册,-Bdynamic

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

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

    gcc -static main.c -o main -lm

回答

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

这就是我一直在寻找的东西。谢谢。 – krzyhub