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