轉載請標明:http://www.cnblogs.com/winifred-tang94/
1、編譯過程
gcc –fPIC –c xxx.c
其中-fPIC是通知gcc編譯器產生位置獨立的目標代碼。鏈接的時候不通過拷貝來進行。
2、鏈接過程
gcc –shared –o libxxx.so xxx.o
經過編譯鏈接就可以生成動態鏈接庫,其擴展名為.so
Eg.
還可以gcc –fPIC –shared -o libhello.so hello.c
舉個例子:
//Hello.h
//hello.c
//main.c
先生成動態鏈接庫
然後編譯鏈接main.c
但是把-lhello放在文件名後面就沒有問題了,並生成了一個main執行文件:
運行執行文件的時候出現了以下問題:
原因可能是程序運行時並不知道動態庫所在的路徑,因此自然未找到。
解決方法:
拷貝動態鏈接庫到系統共享目錄下,或在系統共享目錄下為該動態鏈接庫建立連接(硬連接或符號連接均可,常用符號連接)。
其中ldconfig是為了讓動態鏈接庫為系統所共享。
動態鏈接庫被系統所共享以後,再運行main,得到結果如下:
利用GCC編譯器生成靜態鏈接庫
用個例子來說明如何在gcc編譯器中生成靜態鏈接庫
//Hello.h
//hello.c
//main.c
首先gcc –c hello.c文件生成hello.o
然後利用hello.o生成靜態鏈接庫,利用
ar –rc –o libhello.a hello.o
或者利用 ar rcs –o libhello.a hello.o
然後利用靜態鏈接庫編譯鏈接main.c
http://xxxxxx/Linuxjc/1155427.html TechArticle