g++動態庫靜態庫混合鏈接


今天編譯一個程序時報錯:

g++ -static -o echo.fcgi echo_adaptor.o echo.o -L/usr/local/lib/ -lfastcgipp -L/usr/lib/ -lboost_thread -pthread -lboost_system -lboost_date_time -L/home/chu/lib/ -lwebframework -L/usr/local/lib/ -lctemplate_nothreads -L/usr/lib64/mysql/ -lmysqlclient -L/lib64/ -lrt -Wl,-R/usr/local/lib/ -Wl,-R/usr/lib/ -Wl,-R/usr/local/lib/ 

/usr/bin/ld: cannot find -lboost_thread
/usr/bin/ld: cannot find -lboost_system
/usr/bin/ld: cannot find -lboost_date_time
/usr/bin/ld: cannot find -lmysqlclient
/usr/bin/ld: cannot find -lrt
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lpthread
/usr/bin/ld: cannot find -lc
collect2: 錯誤:ld 返回 1

 

找不到boost庫,但是明明安裝了的(但是只有動態so,沒有靜態.a庫文件):

chu@:~/SCFF_proj/trunk/example/echo/websvc[06:25:35]$ ll /usr/lib/libboost_thread*
-rw-r--r--. 1 root root   524 6月  10 2014 /usr/lib/libboost_thread-mt.so
-rwxr-xr-x. 1 root root 84980 6月  10 2014 /usr/lib/libboost_thread-mt.so.1.53.0
lrwxrwxrwx. 1 root root    21 2月  10 02:04 /usr/lib/libboost_thread.so -> libboost_thread-mt.so

 

分析編譯命令,發現編譯目標是靜態庫(-static ),猜測可能是ld只去查找了.a靜態庫文件,而忽略了動態庫文件。

 

解決辦法:

明確指定哪些庫文件動態鏈接、哪些庫文件靜態鏈接:

g++ -static  -o echo.fcgi echo_adaptor.o echo.o -Wl,-Bstatic -L/usr/local/lib/ -lfastcgipp -L/home/chu/lib/ -lwebframework -L/usr/local/lib/ -lctemplate_nothreads -Wl,-Bdynamic -L/usr/lib/ -lboost_thread -pthread -lboost_system -lboost_date_time -L/usr/lib64/mysql/ -lmysqlclient -L/lib64/ -lrt -Wl,-R/usr/local/lib/ -Wl,-R/usr/lib/ -Wl,-R/usr/local/lib/ 

 

果然搞定了。

 


免責聲明!

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



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