linux動態鏈結庫程式設計入門
動態鏈結庫是一種通用的軟體元件技術,是多種作業系統中提供基本服務的方式。比如win32核心就是3個dll檔案構成。這種技術在linux作業系統下也有對應的實現,就是linux標準物件standard ojbect,對應的擴充套件名為.so。
下面通過乙個簡單的例子開始介紹linux標準物件。
我們的標準物件檔案含有乙個函式,不需要宣告export匯出符號,只需要編譯器設定即可。如下:
#include
#include
void show()
儲存為myso.c檔案,按照如下編譯:
$ gcc -fpic -shared -o libmyso.so myso.c
執行生成乙個libmyso.so檔案,按照linux標準物件的命名慣例,應該在庫名稱之前加上"lib"字首,儘管不是必須的。編譯開關-fpic代表函式符號可以重定向,-shared代表編譯結果是乙個標準物件。
不同於win32dll,linux標準物件中的所有函式都是直接匯出的,都可以被呼叫程式所訪問。下面我們編寫呼叫程式:
#include
int main()
儲存為invoke.c,按照如下gcc開關編譯:
$ gcc -o test invoke.c ./libmyso.so
編譯生成test可執行檔案。如上編譯條件的最後一條需要是所呼叫的標準物件檔名,注意必須含有路徑。如果只是使用libmyso.so,則必須確保這個檔案在可訪問的path下面。本例所使用的檔名"./libmyso.so"是當前路徑下的,使用了相對路徑。
如下測試結果:
$ ./test
invoke my so
standard object by gashero
希望上文的例子可以對大家有所幫助,這也是我的畢業設計題目,待我完成之後會有乙份更加完整的文件介紹win32dll和linux.so的。
linux動態鏈結庫
在做完mini6410移植全攻略後,打算把自己的linux c筆記,貼出來和大家共享,有不對支援希望大家指出,謝謝!在上篇文章中,是對靜態鏈結庫的介紹,其實有了上面的介紹動態鏈結庫的製作就簡單了,這篇來製作動態鏈結庫 建立動態鏈結庫 cpp view plain copy print?gcc sha...
動態鏈結庫 靜態鏈結庫
包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...
靜態鏈結庫 動態鏈結庫
庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...