linux 動態鏈接庫的創建和使用靜態連接法連接

/*
 * author: hjjdebug
 * date: 2012
 * title: linux 動態鏈接庫的創建和使用靜態連接法連接
*/

靜態連接,不需要用戶額外寫代碼,鏈接程序(gcc等)鏈接時指明動態連接庫,並將所有外部符號從連接庫中都找到。

 例如你用的glibc庫就是用靜態連接法建立連接的,下面給出一個實例加深印象.瞭解其連接的過程,原理.

linux 動態鏈接庫的創建和使用
1. 先創建一個動態鏈接庫。源碼如下:
$ cat max.cpp
int max(int a, int b)
{
        return a>b? a:b;
}
編譯生成動態庫
g++ -shared -o libmax.so max.cpp

2. 再創建一個測試用例,源碼如下:
$ cat test.cpp

#include <stdio.h>

int max(int a, int b);

int main(int argc, char *argv[])
{
        int a=max(3,5);
        printf("the bigger is %d\n",a);
        return 0;
}
編譯生成可執行文件
g++ -o test test.cpp -lmax -L`pwd`

這裏說明一下 -lmax 是指明要鏈接libmax.so 文件 -L`pwd` 是說鏈接庫位置在本地。
如果你把庫copy 到系統路徑下,通常是/lib 或/usr/lib 下, 則-L 選項不用添加。

3. 運行可執行文件。
$ ./test
如果你沒有copy 庫到系統目錄下,會有加載錯誤,如下:
./test: error while loading shared libraries: libmax.so: cannot open shared object file: No such file or directory
把庫copy 到系統目錄。
sudo cp libmax.so /lib
再次執行 ./test, 成功!
the bigger is 5

遇到問題,請用工具查詢。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章