1. 靜態庫一定要放在生成文件后面
gcc main.c -o main libhello.a
2. 使用靜態庫時一定要連接所有用到的靜態庫
gcc main.c -o main liba.a libb.a libc.a
a依賴於b, b依賴於c; 注意多個連接靜態庫的順序 規則:越底層的庫放在越后面
3. 靜態庫動態庫相結合使用
gcc main.c –L/usr/local/lib –lworld –o main liba.a
4. 靜態庫鏈接順序例子
1. world.c
#include<stdio.h> void world(void) { printf("world!\n"); }
2. hello.c
#include<stdio.h> void world(void); void hello(void) { printf("hello.\n"); world(); }
4. main.c
void main()
{
hello();
}
5. 編譯成目標文件
gcc -c hello.c world.c
6.生成靜態庫
ar -crv libhw.a hello.o world.o

7. 調用靜態庫生成可執行文件
gcc -o main main.c libhw.a

8. 錯誤鏈接方式

生成對象和靜態庫順序錯誤

靜態類庫在鏈接時候順序不對,libhello.a 依賴於libworld.a
總結如下:
1. 靜態庫和動態庫中只有你寫的代碼,你所調用的所有外部函數的代碼都不會編譯到靜態庫中,所有編譯動態庫和靜態庫時,不需要指定其他庫的庫文件路徑,只需要指定其他庫的頭文件路徑即可;
2. 鏈接靜態庫的順序一定是從新到舊,動態庫鏈接順序沒有要求
3. 靜態庫位於生成對象之后
