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

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. webpy 调试

    服务器在运行过程中,没办法获得变量的值,就难以发现问题出在什么地方而进行调试

  2. jQuery插件开发,jquery插件

    关于jQuery插件的开发自己也做了少许研究,自己也写过多个插件,在自己的团队了也分享过一次关于插件的课.开始的时候整觉的很复杂的代码,现在再次看的时候就清晰了许多.这里我把我自己总结出来的东西分享出 ...

  3. 将excel中的sheet1导入到sqlserver中

    原文地址:C#将Excel数据表导入SQL数据库的两种方法作者:windream 方式一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但 ...

  4. 一个Apache安装多个版本的PHP

    我的服务器centos6.5安装了xampp,php6.5版本的.已经有好几个网站在上面运行了,但是后面要安装该死的ecshop,无奈要装php5.2,因此就想如何能在一个apache上安装多个版本的 ...

  5. 160. Intersection of Two Linked Lists【Easy】【求两个单链表的第一个交点】

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  6. python 简单日志框架 自定义logger

    转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 通常我们在构建 python 系统时,往往需要一个简单的 logging 框架.python 自 ...

  7. 洛谷——P3909 异或之积

    P3909 异或之积 题目描述 对于A_1,A_2,A_3,\cdots,A_NA1​,A2​,A3​,⋯,AN​,求 (6\times \sum_{i=1}^N\sum_{j=i+1}^N\sum_ ...

  8. Python生成随机数的一些函数

    头文件: import random 1.生成一个随机浮点数,范围是0-1: print random.random() 2.生成指定范围内的随机浮点数: print random.uniform(a ...

  9. 安卓 内存泄漏 MemoryAnalyzer

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 需要 获取 root 权限 步骤: 1,使用eclipse 自带的 DDMS 工具分析各线程的内 ...

  10. 【SPOJ 220】Relevant Phrases of Annihilation

    http://www.spoj.com/problems/PHRASES/ 求出后缀数组然后二分. 因为有多组数据,所以倍增求后缀数组时要特判是否越界. 二分答案时的判断要注意优化! 时间复杂度\(O ...