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/ 

 

果然搞定了。

 

转载于:https://www.cnblogs.com/chutianyao/p/4680908.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值