今天编译一个程序时报错:

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 返回

找不到boost库,但是明明安装了的(但是只有动态so,没有静态.a库文件):

chu@:~/SCFF_proj/trunk/example/echo/websvc[::]$ ll /usr/lib/libboost_thread*
-rw-r--r--. root root 6月 /usr/lib/libboost_thread-mt.so
-rwxr-xr-x. root root 6月 /usr/lib/libboost_thread-mt.so.1.53.
lrwxrwxrwx. root root 2月 : /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/ 

果然搞定了。

g++动态库静态库混合链接的更多相关文章

  1. CMake 添加头文件目录,链接动态、静态库(添加子文件夹)

    CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

  2. Linux 下动态库 / 静态库(依赖)

    一. 依赖动态库的动态库 libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而mai ...

  3. linux 动态库 静态库 函数覆盖

    本文讨论了linux动态库  静态库中函数的覆盖问题. 测试目的: 同名函数,分别打成动态库libdync_lib.so与静态库libstatic_lib.a,并把libstatic_lib.a打到另 ...

  4. C++基础知识之动态库静态库

    一. 静态库与动态库 库(library),一般是一种可执行的二进制格式,被操作系统载入内存执行. 我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库 静态库和动态库区别: ...

  5. Linux 动态库 静态库

    什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和Linux的本质不同,因此二者库的二进制是不兼容的.Linux操作系统支持的库函数分为静态库和动态库 ...

  6. C_动态库|静态库

    动态库 动态链接库简称DLL,同时以.dll 为后缀,主要用于提供代码和数据 dll 并不是所有数据都能被访问到,必须要进行导出 动态链接库在内存中始终只保存了一份数据,起到了节约内存的作用 生成动态 ...

  7. gcc链接g++编译生成的静态库和动态库的makefile示例

    使用c++开发程序或者库时,将库提供给其他人使用. 然而使用者是使用c开发的程序,链接g++编译生成的库时,于链接gcc生成的库,有所不同. 首先是静态库,以链接g++编译生成的libmylib.a为 ...

  8. cmake 添加头文件目录,链接动态、静态库(转载)

    来源网址:http://www.cnblogs.com/binbinjx/p/5626916.html 罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目 ...

  9. cmake 添加头文件目录,链接动态、静态库

    罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...

随机推荐

  1. 图形界面远程访问Linux(Debian安装VNC以及开机启动)

    https://blog.csdn.net/wangxiaopeng0329/article/details/51569882

  2. PHP的命名空间namespace

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

  3. JSON字符串转对象

    JSON(JavaScript Object Notation) JavaScript对象标记法:JSON是与JavaScript高度契合的:JSON 语法:    --数组(Array)用" ...

  4. Ubuntu 虚拟机增强包下载

    https://www.virtualbox.org/wiki/Download_Old_Builds_5_1 Extension Pack All Platforms 安装方法详情:https:// ...

  5. web资料收集

    Web安全资料:https://github.com/CHYbeta/Web-Security-Learning http://blog.pentestbegins.com/2017/07/21/ha ...

  6. CF1025B Weakened Common Divisor【数论/GCD/思维】

    #include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include ...

  7. Eclipse有助于提高开发速度的快捷键

    用Eclipse已经很长一段时间了,自己常用的几个快捷键也已经很熟,但还是有一些自己不经常在开发中使用,但非常使用的快捷键,记录下来,以后利用来提高开发效率. 1.ctrl + shift + r   ...

  8. Cobol online program 传指针

  9. Python开发基础-Day18继承派生、组合、接口和抽象类

    类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承obj ...

  10. Python开发基础-Day15正则表达式爬虫应用,configparser模块和subprocess模块

    正则表达式爬虫应用(校花网) import requests import re import json #定义函数返回网页的字符串信息 def getPage_str(url): page_stri ...