歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux文化 >> Linux動態鏈接庫(標准對象)編程入門

Linux動態鏈接庫(標准對象)編程入門

日期:2017/2/27 11:58:35   编辑:Linux文化

Linux動態鏈接庫編程入門

動態鏈接庫是一種通用的軟件組件技術,是多種操作系統中提供基本服務的方式。比如Win32內核就是3個DLL文件構成。這種技術在Linux操作系統下也有對應的實現,就是Linux標准對象Standard Ojbect,對應的文件擴展名為.so。

下面通過一個簡單的例子開始介紹Linux標准對象。

我們的標准對象文件含有一個函數,不需要聲明export導出符號,只需要編譯器設置即可。如下:

#include

#include

void show() {

printf("Standard Object by gashero\n");

}

保存為myso.c文件,按照如下編譯:

$ gcc -fPIC -shared -o libmyso.so myso.c

執行生成一個libmyso.so文件,按照Linux標准對象的命名慣例,應該在庫名稱之前加上"lib"前綴,盡管不是必須的。編譯開關-fPIC代表函數符號可以重定向,-shared代表編譯結果是一個標准對象。

不同於Win32DLL,Linux標准對象中的所有函數都是直接導出的,都可以被調用程序所訪問。下面我們編寫調用程序:

#include

int main() {

printf("Invoke my so\n");

show();

return 0;

}

保存為invoke.c,按照如下gcc開關編譯:

$ gcc -o test invoke.c ./libmyso.so

編譯生成test可執行文件。如上編譯條件的最後一條需要是所調用的標准對象文件名,注意必須含有路徑。如果只是使用libmyso.so,則必須確保這個文件在可訪問的PATH下面。本例所使用的文件名"./libmyso.so"是當前路徑下的,使用了相對路徑。

如下測試結果:

$ ./test

Invoke my so

Standard Object by gashero

Copyright © Linux教程網 All Rights Reserved