2015-06-21 82 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