Linux 使用靜態庫注意事項


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. 靜態庫位於生成對象之后


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM