link时,若liba.a依赖libb.a,若这样写 -lb -la,则链接通不过,gcc有个选项:-Xlinker ,可以让gcc在链接时反复查找依赖库,用法 :

gcc -shared -o libxx.so xx.o  -L.  -Xlinker  "-("  -lb -la "-)" -Xlinker

这样,包含在 -Xlinker  "-("      和       "-)" -Xlinker  之间的库之间的依赖关系就不用自己操心了,linker自己知道前向回去搜索一次。

(注:   --start-group  与 --end-group   与上面的 -Xlinker功能差不多,不过不推荐)

linker还有一个选项,主要用在当用静态库生成动态库时,将静态库完整打包到动态库里,不过会使动态库占用空间变大,不推荐,示例:

gcc -shared -o libxx.so xx.o -L. -Wl,--whole-archive some_static_lib.a yy.o -Wl,--no-whole-archive

-Wl,--whole-archive-Wl,--no-whole-archive 必须成对出现,不然出现 redefine错误,因为隐性的 -lc -ld -lm -lz 等都被多次完整打包,容易出现 redefine错误。

对于多个静态库,最好不要用ar将它们打包到一个静态库,链接后的so库有可能会存在 undefined symbol 的符号,在运行时候才会触发错误(链接时不会出错)。

多个静态库还是推荐单独使用他们为好,即: -la -lb -lcc -ldd。

不推荐将 liba.a libb.a libcc.a libdd.a 用ar打包成一个库来使用,不然运行有可能出错的。

gcc编译选项的循环重复查找依赖库等命令的更多相关文章

  1. GCC依赖库顺序问题

    今天在把linux下做的ipmsg移植到windows过程中,因为包含了一个开源库SimpleSocket,而这个库又引用了winsock2,没太注意就写下了下面的makefile: g++ -o t ...

  2. (转载)gcc编译选项总结

    转载自:https://blog.csdn.net/gatieme/article/details/21389603 常用编译选项 gcc and g++分别是gnu的c & c++编译器 g ...

  3. 2015-08-26: GCC编译选项(转载)

    gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告:           -Waddress -Warray-bounds (only with -O2) ...

  4. GCC 编译选项

    http://www.cnblogs.com/xmphoenix/archive/2011/03/21/1989944.html GCC 编译选项(转) gcc提供了大量的警告选项,对代码中可能存在的 ...

  5. gcc编译选项【转】

    转自:https://blog.csdn.net/rheostat/article/details/19811407 常用选项 -E:只进行预处理,不编译-S:只编译,不汇编-c:只编译.汇编,不链接 ...

  6. 折腾gcc/g++链接时.o文件及库的顺序问题(转)

    转自: http://www.cnblogs.com/OCaml/archive/2012/06/18/2554086.html#sec-1-1 折腾gcc/g++链接时.o文件及库的顺序问题 Tab ...

  7. 折腾gcc/g++链接时.o文件及库的顺序问题

    gcc/g++链接时.o文件以及库的顺序问题 1 写在前面 最近换了xubuntu12.4,把原来的项目co出来编译的时候报"undefined reference to".猜测是 ...

  8. GCC 编译使用动态链接库和静态链接库的方法

    1 库的分类 依据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的.所以生成的可执行文件就不受库的影响了.即使库被删除了,程序依旧能够成功执行. 有别于静态库,动态库的链接是在程 ...

  9. [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

    来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...

随机推荐

  1. jdbc 连接Oracle informix Mysql

    package com.basicSql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Res ...

  2. NGUI系列教程五(角色信息跟随)

    在一些网络游戏中,我们常常可以看到角色的上方显示着角色的名称,等级,血量等信息.它们可以跟随角色移动,并且可以显示和隐藏.今天我们就来学习一下这些功能的实现方法.1. 新建unity工 程,导入NGU ...

  3. C#委托的语法

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using Delegate; na ...

  4. javascript editor

    http://www.jetbrains.com/webstorm/download/download_thanks.jsp?os=win

  5. iOS8的一些控件的变更---备用

    UISearchDisplayController变更为UISearchController UIAlertView变更为UIAlertController 如果添加点击事件则需要使用UIAlertC ...

  6. 领域驱动设计和实践(转:http://kb.cnblogs.com/page/112298/)

    引言 软件系统面向对象的设计思想可谓历史悠久,20世纪70年代的Smalltalk可以说是面向对象语言的经典,直到今天我们依然将这门语言视为面向对象语言的基础.随着编程语言和技术的发展,各种语言特性层 ...

  7. oracle 内置函数 least decode

    在博客园的第一个博客,为什么叫第一个.... oracle 内置函数 east(1,2,3,4.....) 可以有多个值,最多几个?不知道欢迎补充 ,,,) from dual 这个函数返回是1,就是 ...

  8. Excel技巧收录

    帮老婆弄Excel,自己也把学到的东西记录下,免得以后被问到又给忘了 数据透视,需先在数据透视区域加上表头,如公司名称.销量等,Excel数据透视默认将选择区域的第一行作为表头 VLOOKUP,VLO ...

  9. C# 发送邮件实例代码

    1.构造附件 static List<Attachment> BuildAttachments(List<EmailFile> files) { ) { return null ...

  10. Asp.net MVC 视图之公用代码

    一.公共模板 转自:http://www.cnblogs.com/kissdodog/archive/2013/01/07/2848881.html 1.@RenderBody() 在网站公用部分通过 ...