gcc/g++ 静态动态库 混链接.
来源:互联网 发布:js模块化规范 编辑:程序博客网 时间:2024/06/06 00:45
我的环境: centos6 x64. gcc4.4.7
在使用gcc/g++ 编译程序时我们希望指向一些库是使用静态的链接方式. 另外的一些是动态的方式.
我以boost 为例.
如果我们要使用静态库则是这样的:
# g++ main.cpp -lpthread /usr/lib64/libboost_thread.a /usr/lib64/libboost_system.a
静态库直接写路径. 动态前面加-l 这样也可以实现.
但有没有更好的办法呢. 有.
先参考个帖子:http://stackoverflow.com/questions/3698321/g-linker-force-static-linking-if-static-library-exists
根据老外这个帖子 照猫画狗
g++ main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread -Wl,-Bdynamic
这样就可以了.
再来看一下老外的这个例子:
g++ main.cpp -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
Will link zlib and libfoo as static, and libbar as dynamic . --as-needed will drop any unused dynamic library.
但是这个过程中我用了将近1天时间才搞定的.
因为我刚开始是这样写的:
g++ main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread
这样它就会出现这样的错误提示:
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
于是我就按照这个提示搞. 意思就是 libgcc_s.so 没找到. 于是 我就折腾这个. 明明它在.可是就是提示找不到这个错误.
搞了大半天就要放弃了..
我最后想是不是 要在后面加 -Wl,-Bdynamic 其它的库才能默认动态链接.
试了一下果然..
我在后面加了这个就成功了.
g++ main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread -Wl,-Bdynamic -Wl,--as-needed
-Wl,--as-needed 这个选项是可选的是 这个选项的意思是去除没有使用的动态库
还有一个比较简单的错误就是 :
thread.cpp:(.text+0x1a93): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1b08): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1b6f): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1bd6): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1c3d): undefined reference to `clock_gettime'
一般动态链接时不会出现这个错. 是静态链接时才出这个错.
加上 -lrt 选项就好了.
- gcc/g++ 静态动态库 混链接.
- gcc/g++ 静态动态库 混链接.
- gcc/g++ 静态动态库 混链接.
- gcc/g++ 动态 静态 链接库 so
- gcc/g++动态链接库和静态库的链接顺序
- gcc链接g++编译生成的静态库和动态库的makefile示例
- GCC动态链接库和静态库
- gcc使用---动态库链接静态库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- GCC编译动态和静态链接库
- gcc编译动态和静态链接库
- GCC编译动态和静态链接库
- gcc编译动态和静态链接库
- gcc编译使用动态静态链接库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- gcc中静态链接库和动态链接库
- C++对象数组的创建
- gcc -rdynamic参数解释
- tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样。
- 记事本中写c/c++程序在Windows下执行
- Java容器学习之Map
- gcc/g++ 静态动态库 混链接.
- mac 安装jdk和eclipse环境
- 使用Maven为一个项目生成多个Jar包
- UVA 10608并查集
- Mybatis笔记之四 -- mybatis与spring整合简单例子
- 制作个人开发IDE
- Linux GCC常用命令
- 与数据库oracle进行连接
- CodeForces 237C 筛素数+二分