// 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 程式在執行時,與函式庫再無瓜葛,因為所有需要的函式已拷貝到自己門下。所以...