制作一個動態庫
我們可以使用gcc工具來制作一個動態庫
示例:自己制作一個動態庫,庫函數的功能是傳遞一個字符串並輸出。
第一步:需要准備3個文件:hello.h、hello.c、test.c。其中hello.h和hello.c用於制作動態庫,test.c是測試程序主函數
第二步:使用gcc編譯生成動態庫
gcc hello.c -fPIC -c -o hello.o
gcc hello.o -shared -o libmyhello.so
(或者直接一步:gcc hello.c -fPIC -shared -o libmyhello.so)
gcc參數解析:
⒈-fPIC(或-fpic):表示編譯為位置獨立的代碼。位置獨立的代碼即位置無關代碼,在可執行程序加載的時候可以存放在內存內的任何位置。若不使用該選項則編譯后的代碼是位置相關的代碼,在可執行程序加載時是通過代碼拷貝的方式來滿足不同的進程的需要,沒有實現真正意義上的位置共享。
⒉-shared:指定生成動態鏈接庫
ldd hello
linux-gate.so.1 => (0xb77b0000)
libmyhello.so => not found
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75f6000)
/lib/ld-linux.so.2 (0xb77b1000)
第三步:定位自己制作的動態庫
為了讓系統能成功找到自己制作的動態庫,需要定位到該動態庫的位置。有三種方式:
⑴把自己制作的庫拷貝到/usr/lib和/lib下。
⑵在LD_LIBRARY_PATH環境變量中添加自己制作的庫所在的位置。/
⑶添加/etc/ld.so.conf.d/XXX.conf文件(XXX需要自己命名),把庫所在的路徑添加到文件末尾並執行ldconfig刷新。 //對所用用戶有效
第一種:將庫拷貝到/usr/lib和/lib下。
sudo cp libmyhello.so /usr/lib
sudo cp libmyhello.so /lib
此時再執行./hello即可得到正確的顯示結果。
第二種:修改LD_LIBRARY_PATH環境變量:
sudo vim /etc/bash.bashrc 對所有用戶生效 或者修改 ~/.bashrc 這樣就只對當前用戶生效
在文件最后,添加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/file/dongtaiku
保存退出,重啟終端,此時再執行./hello即可得到正確的顯示結果。。
第三種:添加/etc/ld.so.conf.d/XXX.conf文件
sudo vim /etc/ld.so.conf.d/my.conf
在文件內添加動態庫的目錄
/home/linux/file/dongtaiku
保存退出,執行ldconfig使設置生效
sudo ldconfig
第四步:修改編譯時的搜索庫路徑
方法一:可以直接在gcc編譯時 -L加庫路徑
方法二:添加庫路徑至LIBRARY_PATH環境變量
第五步:
創建動態庫的同時那以避免我們會使用到頭文件
我們應該修改頭文件的路徑的環境變量C_LIBRARY_PATH
---------------------
作者:crazy_koala
來源:CSDN
原文:https://blog.csdn.net/crazy_koala/article/details/53968063
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!