ubuntu下动态链接库的编译和使用实例
生活随笔
收集整理的這篇文章主要介紹了
ubuntu下动态链接库的编译和使用实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下實例的環境是amd64 + ubuntu10.10 +g++ 4.4.5測試成功,在其他配置的機器上可能有一點區別。 ?動態庫的使用方式中有兩種,第一種是類似于靜態庫的使用,另一種我稱之為真正的動態加載動態庫,主要是因為這種方式在程序運行的過程中加載鏈接庫,使用之后在卸載鏈接庫。 ??先介紹第一種。 ?在目錄/home/owner/test/下創建我們的實驗程序: ???? //dll_fun.c ? ?? #include<stdio.h> ? ???void dll_function(const char*szString) ? ?? { ? ????? ???printf("%s\n",?szString); ? ?? } ??編譯生成動態鏈接庫 ? ???gcc -c-fPIC?dll_fun.c //這里一定要加上-fPIC選項,不然下一步編譯失敗 ? ? ?? gcc -shared -fPIC -olibdllfun.so?dll_fun.o //生成動態鏈接庫libdllfun.so ? 創建調用動態庫方法: ? ???//main.c ? ?? void?dll_function(const char*szString); ? ???int main() ? ?? { ? ????? ??dll_function("This is the words of the dllfunction!!!!!!"); ? ?? ? ?? ?return0;? ? ?? } ??編譯main.c生成可執行文件 ? ?? gcc -o main main.c -L. -ldllfun//這里提供了剛才生成的dllfun庫 ?如果此時執行./main的話,會出現如下錯誤: ? ???cannot open shared object file:No such file or directory ??這是因為系統未找到動態庫libdllfun.so。 ? ??Linux動態鏈接庫的默認搜索路徑是/lib和/usr/lib,因此動態庫被創建后,一般都復制到這兩個目錄下面,當程序執行時需要某動態庫,并且改動態庫還沒有加載到內存中,則系統會自動到這兩個默認的搜索路徑中去查找相應的動態庫文件,然后加載改文件到內存中,這樣程序就可以使用該動態庫中的函數以及該動態庫中的其他資源了。在linux中,動態庫的搜索路徑除了默認的搜索路徑外,還可以通過其他三種方法來指定,這里只介紹其中的一種:通過環境變量LD_LIBRARY_PATH指定動態庫搜索路徑。 ??當通過該環境變量指定多個動態鏈接庫搜索路徑時,路徑之間用冒號":"分隔。? ?? ??使用下面命令來配置環境 ????mkdir?/home/owner/test/lib//將這個目錄設置為動態庫的存放目錄 ????mkdir/home/owner/test/libdllfun.so?/home/owner/test/lib/libdllfun.so ????export?LD_LIBRARY_PATH=/home/owner/test/lib ??此時設置這個環境變量之后的所有命令命令中,該環境變量都有效。 ??把.so(動態鏈接庫)直接放在根目錄下的lib文件下(!!!一面總是加載不到路徑)
總結
以上是生活随笔為你收集整理的ubuntu下动态链接库的编译和使用实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里巴巴代码平台架构的演进之路
- 下一篇: Linux内核社区迁移到github?