gcc 庫路徑里同時有相同文件名的動態庫和靜態庫


找不到庫的處理方案

有兩種方法:

一、可以把當前路徑加入 /etc/ld.so.conf中然后運行ldconfig,或者以當前路徑為參數運行ldconfig(要有root權限才行)。

二、把當前路徑加入環境變量LD_LIBRARY_PATH中

 

如何使用庫
gcc中關於庫的參數有:
-L  指定搜尋庫的目錄
      如指定當前目錄 gcc -L .
-l    指定要鏈接的庫的名稱
      加入庫的名稱是libmylib.a,則gcc -l mylib,即去頭去尾。
--static  組織在鏈接時使用動態庫
--shared 生成動態庫
--static-libgcc  鏈接靜態libgcc庫
--shared-libgcc 鏈接動態libgcc庫
 
可見對動態庫和靜態庫的使用方法是一樣的, 同一個庫如果同時存在動態庫和靜態庫,優先鏈接動態庫,除非使用--static強制使用靜態庫。
 
庫標准路徑下存在libABC.a和libABC.so使用gcc -lABC如何選擇連接靜態連接庫或者動態連接庫?通過--hare --static選項?
如果在同一路徑下面,並且兩種庫同名,這樣會選擇動態庫。
 
gcc 同時連接 靜態庫和動態庫現在有 libmy.a & libmy.so兩個庫,其中的函數供main.cc調用要在可執行文件中同時連接這兩個庫gcc -g -lstdc++ -g -L. -lmy -l ./libmy.a -o test.exe main.cc // 報找不到libmy.a,可是在當前目錄下已經有這個文件了gcc -g -lstdc++ -g -L. -l libmy.so -l ./libmy.a -o test.exe main.cc // 報找不到libmy.so,在當前目錄下也有這個文件用了 -static 選線,則報動態庫中的函數沒定義請問大家有什么招不?
我記得靜態庫混合動態庫要加特殊指令的,你可以試試這樣:gcc -g -lstdc++ -g -WI,-Bdynamic -L. -lmy -WI,-Bstatic -L. -lmy -o test.exe main.cc
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM