Linux 編譯靜態鏈結庫與動態鏈結庫的方法

2021-07-07 02:35:43 字數 1170 閱讀 4862

// hello.c

#include int main(int argc, char *argv)

1、編譯生成可執行檔案

gcc -o test hello.c

2、編譯生成目標檔案

gcc -c -o test.o hello.c

// string.c

#define endstring '\0'

int strlen(char *string)

// main.c

#include extern int strlen(char *str);

int main(int argc, char *argv)

3、多檔案編譯

gcc -o test string.c main.c

4、預處理

gcc -e string.c -o string.i

5、編譯成組合語言

gcc -s string.c

6、生成靜態鏈結庫 .a 檔案

ar -rcs libstr.a string.o

7、使用靜態鏈結庫

gcc -o test main.c -l./ -lstr 或 gcc -o test main.c libstr.a // 在使用-l選項時,-o選項要在-l選項之前出現,否則gcc會認為-l是生成的目標而出錯

8、生成動態鏈結庫

gcc -fpic -shared -wl,-soname,libstr.so -o libstr.so.1 string.c

-wall:包含warning資訊;

-fpic:編譯動態庫所必須的, 輸出不依賴位置的**;

-shared:編譯動態庫必須選項;

-w1:向聯結器傳遞一些引數,在這裡傳遞的引數有"-soname", "libstr.so";

-o:動態庫的名字,在這個例子裡最終生成動態庫libstr.so.1;

9、linux系統中動態鏈結庫搜尋路徑配置檔案

/etc/ld.so.conf

也可以通過ldconfig 《動態鏈結庫所在絕對路徑》,來新增動態鏈結庫搜尋路徑

10、編譯可執行程式test呼叫libstr.so

gcc -o test main.c -l./ -lstr 或 gcc -o test main.c libstr.so

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

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

linux靜態鏈結庫與動態鏈結庫詳解

linux靜態鏈結庫與動態鏈結庫詳解 一順便說說了哦 通常情況下,對函式庫的鏈結是放在編譯時期 compile time 完成的.所有相關的物件檔案 object file 與牽涉到的函式庫 library 被鏈結合成乙個可執行檔案 executable file 程式在執行時,與函式庫再無瓜葛,因...

linux靜態鏈結庫與動態鏈結庫詳解

一順便說說了哦 通常情況下,對函式庫的鏈結是放在編譯時期 compile time 完成的.所有相關的物件檔案 object file 與牽涉到的函式庫 library 被鏈結合成乙個可執行檔案 executable file 程式在執行時,與函式庫再無瓜葛,因為所有需要的函式已拷貝到自己門下。所以...