zoukankan      html  css  js  c++  java
  • 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/ 

    果然搞定了。

  • 相关阅读:
    Blob对象转File对象
    TCP的三次握手 与 四次挥手
    HTTP协议 与 TCP协议 的区别
    tcp四次挥手
    tcp协议
    tcp的三次握手
    关于HTTP协议 && TCP协议的一些理解
    Javascript数组中常用的排序法 ——冒泡排序法和选择排序法以及快速排序法
    如何用Bat批处理自制自解压文件
    [SQL]查询所有数据库、表名、表字段总结
  • 原文地址:https://www.cnblogs.com/chutianyao/p/4680908.html
Copyright © 2011-2022 走看看