ubuntu gcc如何生成靜態庫和動態庫

ubuntu系統中,使用gcc編譯器生成靜態庫(.a文件)和動態庫(.so文件)的過程如下:

生成靜態庫

  1. 編寫源代碼: 假設你有以下兩個源文件 libsource1.c 和 libsource2.c。

    // libsource1.c void function1() {     printf("Function 1 from libsource1n"); }  // libsource2.c void function2() {     printf("Function 2 from libsource2n"); } 
  2. 編譯源文件為對象文件: 使用 gcc 編譯每個源文件為對象文件(.o 文件)。

    gcc -c libsource1.c -o libsource1.o gcc -c libsource2.c -o libsource2.o 
  3. 創建靜態庫: 使用 ar 工具將對象文件打包成靜態庫。

    ar rcs libmylib.a libsource1.o libsource2.o 

    這將生成一個名為 libmylib.a 的靜態庫。

生成動態庫

  1. 編寫源代碼: 假設你有以下源文件 libsource1.c 和 libsource2.c。

    // libsource1.c void function1() {     printf("Function 1 from libsource1n"); }  // libsource2.c void function2() {     printf("Function 2 from libsource2n"); } 
  2. 編譯源文件為位置無關代碼(PIC)對象文件: 使用 gcc 編譯每個源文件為位置無關代碼(PIC)對象文件(.o 文件)。位置無關代碼是生成動態庫所必需的。

    gcc -c -fPIC libsource1.c -o libsource1.o gcc -c -fPIC libsource2.c -o libsource2.o 
  3. 創建動態庫: 使用 gcc 將對象文件鏈接成動態庫。

    gcc -shared -o libmylib.so libsource1.o libsource2.o 

    這將生成一個名為 libmylib.so 的動態庫。

使用庫

靜態庫

假設你有一個主程序 main.c,它使用了 libmylib.a 中的函數。

// main.c #<span>include <stdio.h></span>  void function1(); void function2();  int main() {     function1();     function2();     return 0; } 

編譯并鏈接主程序:

gcc main.c -L. -lmylib -o myprogram 

運行程序:

./myprogram 

動態庫

假設你有一個主程序 main.c,它使用了 libmylib.so 中的函數。

// main.c #<span>include <stdio.h></span>  void function1(); void function2();  int main() {     function1();     function2();     return 0; } 

編譯并鏈接主程序:

gcc main.c -L. -lmylib -o myprogram 

運行程序時,確保動態庫在系統的庫路徑中,或者設置 LD_LIBRARY_PATH 環境變量:

export LD_LIBRARY_PATH=. ./myprogram 

通過以上步驟,你可以在Ubuntu系統中使用GCC生成和使用靜態庫和動態庫。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享