Linux編譯動態鏈結庫和使用

2021-07-08 17:10:36 字數 903 閱讀 3362

1、編譯動態鏈結庫,將lib_a.c和lib_b.c編譯成動態庫

lib_common.h

#ifndef __lib_common_h

#define __lib_common_h

void liba_printf();

void libb_printf();

#endif

lib_a.c

#include 

#include "lib_common.h"

void liba_printf(void)

lib_b.c

#include 

#include "lib_common.h"

void libb_printf(void)

將上面兩個檔案編譯成動態庫:

gcc lib_a.c lib_b.c -fpic -shared -o libtest.so

在當前目錄下會生成庫檔案libtest.so

2、使用動態鏈結庫檔案

main.c

#include 

#include "lib_common.h"

int main(void)

編譯main.c的命令:

gcc main.c -l. -ltest -o main(-l後面有個.,表示鏈結庫的目錄是在當前目錄,否則編譯會出undefined symbols錯誤)

執行./main,輸出:

main func reference the lib fun.

this is lib a print.

this is lib b print.

linux 編譯靜態鏈結庫和動態鏈結庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在linux中如何建立靜態...

GCC 編譯使用動態鏈結庫

動態鏈結庫 1.建立動態鏈結庫 複製 如下 include void hello 用命令gcc shared hello.c o libhello.so編譯為動態庫。可以看到,當前目錄下多了乙個檔案libhello.so。2.再編輯乙個測試檔案test.c,內容如下 複製 如下 include in...

GCC 編譯使用動態鏈結庫和靜態鏈結庫

1 庫的分類 根據鏈結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在鏈結階段被鏈結的 好像是廢話,但事實就是這樣 所以生成的可執行檔案就不受庫的影響了,即使庫被刪除了,程式依然可以成功執行。有別於靜態庫,動態庫的鏈結是在程式執行的時候被鏈結的。所以,即使程式編譯完,庫仍須保留在系統上,以供程式執行...