连接动态链接库时找不到链接库的解决办法
生活随笔
收集整理的這篇文章主要介紹了
连接动态链接库时找不到链接库的解决办法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
連接動態鏈接庫時找不到鏈接庫的解決辦法
鏈接動態庫時,可能會出現無法找到鏈接庫的錯誤,如果用ldd命令就能查看到可執行文件的所有依賴的庫。在《linux c一站式編程》一書中看到了一些解決辦法,先總結如下四中辦法:
方法一
如果只是在開發中臨時使用一下,可以使用 LD_LIBRARY_PATH 這個變量進行設置
EXPORT LD_LIBRARY_PATH=當前所依賴的庫的路徑這種辦法只是臨時有效,如果重新啟用一個終端,就需要重新設置一次。
方法二
連接動態鏈接庫是由動態鏈接器決定的,那么首先需要知道動態鏈接器是如何查找庫的。
- 首先在環境變量 LD_LIBRARY_PATH 所記錄的路徑中查找,如果沒有找到,就進行下一步
- 從緩存文件 /etc/ld.so.cache 中查找,在root權限下,使用ldconfig命令,讀取 /etc/ld.so.conf 文件并生成該緩存文件
- 如果以上兩種辦法都沒有找到動態庫,那么動態鏈接器會在系統默認路徑中查找,先在 /usr/lib/ 中查找,然后再 /lib 中查找
那么,根據以上動態鏈接器查找庫的方法,將庫的路徑寫入 /etc/ld.so.conf 文件中,然后運行ldconfig(ldconfig -v可以查看詳細信息),就能生成緩存文件,連接器就能找到庫文件
方法三
直接將庫文件復制一份到/usr/lib 或者 /lib 目錄中,讓動態鏈接器在系統默認路徑中查找
方法四
在使用gcc編譯時,添加選項 -Wl,-rpath,動態庫的路徑, 表示-rpath 動態庫路徑 是由gcc傳遞給鏈接器的選項。
gcc main.c -g -L. -lstack -Istack -o main -Wl,-rpath,$PWDgcc 編譯 main.c ,鏈接動態庫libstack.so,頭文件在 ./stack目錄中,制定的庫文件路徑在當前路徑中
總結
以上是生活随笔為你收集整理的连接动态链接库时找不到链接库的解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell脚本while read li
- 下一篇: dubbo与springmvc的简单使用