1. <wbr id="cnjas"><legend id="cnjas"></legend></wbr>

          Linux培訓
          達內IT學院

          400-111-8989

          動態庫的使用

          • 發布:Linux培訓
          • 來源:Linux基礎
          • 時間:2016-12-13 14:47

          動態庫的使用

          用法一:動態鏈接。

          動態庫的使用

          使用“-ltest”標記來告訴GCC驅動程序在連接階段引用共享函數庫libtest.so。“-L.”標記告訴GCC函數庫可能位于當前目錄。否則GNU連接器會查找標準系統函數目錄。

          這里我們注意,ldd的輸出它說我們的libtest.so它沒找到。還記得我在前面動態鏈接庫一節剛開始時的那堆嘮叨么,現在你應該很明白了為什么了吧。因為我們的libtest.so既不在/etc/ld.so.cache里,又不在/lib、/usr/lib或/etc/ld.so.conf所指定的任何一個目錄中。怎么辦?還用我告訴你?管你用啥辦法,反正我用的ldconfig pwd搞定的:

          動態庫的使用

          執行結果如下:

          動態庫的使用

          偶忍不住又要羅嗦一句了,相信俺,我的嘮叨對大家是有好處。我為什么用這種方法呢?因為我是在給大家演示動態庫的用法,完了之后我就把libtest.so給刪了,然后再重構ld.so.cache,對我的系統不會任何影響。倘若我是開發一款軟件,或者給自己的系統DIY一個非常有用的功能模塊,那么我更傾向于將libtest.so拷貝到/lib、/usr/lib目錄下,或者我還有可能在/usr/local/lib/目錄下新建一文件夾xxx,將so庫拷貝到那兒去,并在/etc/ld.so.conf.d/目錄下新建一文件mytest.conf,內容只有一行“/usr/local/lib/xxx/libtest.so”,再執行ldconfig。如果你之前還是不明白怎么解決那個“not found”的問題,那么現在總該明白了吧。

          方法二:動態加載。

          動態加載是非常靈活的,它依賴于一套Linux提供的標準API來完成。在源程序里,你可以很自如的運用API來加載、使用、釋放so庫資源。以下函數在代碼中使用需要包含頭文件:dlfcn.h

          動態庫的使用

          dlsym(void *handle, char *symbol)

          filename:如果名字不以“/”開頭,則非絕對路徑名,將按下列先后順序查找該文件。

          (1)用戶環境變量中的LD_LIBRARY值;

          (2)動態鏈接緩沖文件/etc/ld.so.cache

          (3)目錄/lib,/usr/lib

          flag表示在什么時候解決未定義的符號(調用)。取值有兩個:

          1) RTLD_LAZY : 表明在動態鏈接庫的函數代碼執行時解決。

          2) RTLD_NOW :表明在dlopen返回前就解決所有未定義的符號,一旦未解決,dlopen將返回錯誤。

          dlsym(void *handle, char *symbol)

          dlsym()的用法一般如下:

          void(*add)(int x,int y); /*說明一下要調用的動態函數add */
          add=dlsym("xxx.so","add"); /* 打開xxx.so共享庫,取add函數地址 */
          add(89,369); /* 帶兩個參數89和369調用add函數 */
          

          看我出招:

          動態庫的使用

          執行結果:

          動態庫的使用

          使用動態鏈接庫,源程序中要包含dlfcn.h頭文件,寫程序時注意dlopen等函數的正確調用,編譯時要采用-rdynamic選項與-ldl選項(不然編譯無法通過),以產生可調用動態鏈接庫的執行代碼。

          OK,通過本文的指導、練習相信各位應該對Linux的庫機制有了些許了解,最主要的是會開發使用庫文件了。由于本人知識所限,文中某些觀點如果不到位或理解有誤的地方還請各位個人不吝賜教。

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:Linux系統中的動態庫
          下一篇:Linux標準目錄結構

          Linux系統中的動態庫

          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          欧美做爰视频免费播放_做暖全过程免费的视频_性爱免费视频 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>