今天編譯一個程序時報錯:
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/
果然搞定了。
