gcc/g++ 静态动态库 混链接.

转载自:http://blog.csdn.net/wangxvfeng101/article/details/15336955

我的环境: 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'

一般动态链接时不会出现这个错.  是静态链接时才出这个错.

(0)

相关推荐

  • AWS CPP SDK 编译链接

    728 x 394960 x 520 AWS scheme modify date:2018.03.22 [TOC] AWS 库编译 To use the AWS SDK for C++, you n ...

  • C++静态库与动态库深入研究

    这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自 ...

  • (7条消息) Qt生成和调用动态库dll,和静态库.a(windows和linux通用)

    系统1:ThinkPad T570.Windows10.QT5.12.2(Qt Creater 4.8.2) 一.动态库.dll的创建和调用 1.在qtcreater中按如下步骤创建动态库,动态库名为 ...

  • windows编译darknet静态库和动态库,并在自己的项目中调用

    调用darknet 文章目录 调用darknet 前言 一.编译过程 1.github下载项目 2.编译 二.使用步骤 1.引用库 前言 最近需要做一个图片分类的项目,尝试了很多方法,包括Opencv ...

  • C++静态库与动态库

    这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自 ...

  • 应用程序设计:在动态库中如何调用外部函数?

    大家好,我是一个动态链接库! 这个名字,相信你一定早就如雷贯耳了. 在计算机早期时代,由于内存资源紧张,我可是发挥了重大的作用! 不论是在 Windows 系统中,还是在 Unix 系列平台上,到处都 ...

  • 颈椎诊查必备—静态动态触诊

    触诊基本方法 一.静态触诊 脊柱静态触诊,是指患者保持体位静止的状态,施术者运用"手摸心会"的方法进行压痛点检查的技术.摸法可具体细分为按.拨.揉.推四个操作手法. 1.按法  分 ...

  • 程序运行时,是怎么找到动态库的?

    我们随便开发一个C/C++程序,都很大程度不可避免的需要用到动态库: // 来源:公众号[编程珠玑] #include <stdio.h> int main() {     printf( ...

  • 【运动拉伸类型】静态,动态拉伸,弹振拉伸和PNF拉伸

    拉伸类型 拉伸的类型有很多,但基本有四类:静态拉伸,弹振拉伸,动态拉伸和PNF拉伸. 1.静态拉伸: 静态拉伸的适宜时间为10~30秒.30秒或30秒以上为佳,不要拉伸至肌肉疼痛,拉伸到有不适感即可, ...

  • VLC动态库介绍(续一)

    竟然一个搞不定.... /**  * Get the current movie time (in ms).  *  * \param p_mi the Media Player  * \param ...