当前位置:  技术问答>linux和unix

求助:如何让linux下ld自动检查.a包中的函数重名

    来源: 互联网  发布时间:2016-12-12

    本文导语:  有两个c文件,t.c和t2.c,分别定义了一个函数ttt(); 按说编译之后再链接时,应该报错: multiple definition of `ttt'。但实际情况却是: 1) 如果我编译出两个obj(t.obj t2.obj),然后ld 这两个obj,的确会报错: [root@loca...

有两个c文件,t.c和t2.c,分别定义了一个函数ttt();
按说编译之后再链接时,应该报错: multiple definition of `ttt'。但实际情况却是:

1) 如果我编译出两个obj(t.obj t2.obj),然后ld 这两个obj,的确会报错:
[root@localhost temp]# gcc -o t2.obj -c t2.c;gcc -o t.obj -c t.c
[root@localhost temp]# ld t.obj t2.obj
t2.obj: In function `ttt':
t2.c:(.text+0x0): multiple definition of `ttt'
t.obj:t.c:(.text+0xf): first defined here

但是,如果我把两个.obj ar成一个.a包,再针对.a包进行ld,则不会报错:
[root@localhost temp]# gcc -o t2.obj -c t2.c;gcc -o t.obj -c t.c;ar crus t.a t.obj t2.obj
[root@localhost temp]# gcc -o t2.obj -c t2.c;gcc -o t.obj -c t.c;ar crus t.a t.obj t2.obj;ld --start-group t.a --end-group -e main
[root@localhost temp]#  

现在我们代码工程很大,而且是分模块维护,互相之间通过.a进行版本共享,避免不了这个问题。


此问题原来被我发在  CSDN-CSDN社区-Linux/Unix社区-专题技术讨论区 ,  
http://topic.csdn.net/u/20110624/08/e42379c4-bffc-46bb-81e9-7bbc6f4cec3f.html
解决办法是使用nm报错:
nm -s software.a s5348.a drv_platform.a|awk 'toupper($2)==($2) {print $3}'|sort|uniq -d

但是nm写在makefile中不方便,而且此种做法有很多误报,工程大了改不过来。

希望这里的大大们能帮忙支招。多谢了!

|
呵呵 lz又来了

感觉不能实现,看看这个链接
库冲突 - hqin6的专栏 - CSDN博客

摘录:
1、应用程序在链接阶段时,会顺序生成符号表。也就是说,在应用程序中涉及到的符号,会在链接文件中逐个顺次查找
2、一旦查找到符号,就停止本符号的查找工作,转向第二个符号的查找
3、如果没有用到.a里的符号,即查找的过程中没有涉及到该.a,则不会在程序中链接该.a

链接过程中在你的.a里找到一个符号之后,不会继续查找了,虽然你的库里还有第二个同名的函数
这样也就不会报错重复定义

|
做不到
实际使用中要避免这样的用法
你有源代码的话,可以直接改符号名啊

除非你用ar把.a解包,然后把结果放后面重新链接

|
这个问题,我也没涉及到,等高人来看看吧.帮你顶了.

    
 
 

您可能感兴趣的文章:

  • 求助,linux下如何使用函数更改时区,例如设置美国时区 谢谢
  • 求助 请问vxworks支持inet_ntoa函数吗? 需要包含哪些头文件? 谢谢
  • 【求助】:如何用ioctl()函数调用一个驱动程序
  • [求助] 关于ctime函数..
  • 求助:ioctl函数的命令参数
  • [求助]请问socket编程中send()函数可以发送整形数据吗?
  • C++如何调用库里面的C函数?求助~~
  • 求助:函数getpeername()返回的namelen很小,导致获得名字失败是为什么?谢谢!!!
  • 【求助】我刚装REDHAT9,用SOCK函数总返回-1
  • 求助,关于GTK的退出函数
  • 菜鸟求助linux最最基本的HELLO函数错误
  • [求助]popen 函数引起 shell 调用, sh 成为僵尸进程.
  • 【急】求助各位老师。关于getrusage函数的用法。
  • [求助]关于SOCKET编程中close函数阻塞的问题。
  • 高分求助icmp_hdr()函数的问题
  • 高分求助关于jsp自定义函数的问题
  • 向各位求助:关于signal函数
  • 求助socket编程问题:C/S模式.客户端调用Winsock函数connect()的时候,返回错误码是10065(主机路由不可达).
  • gethostbyaddr函数老是返回为null 但是查看errno又说成功(success) 为什么求助 深夜求帖
  • 求助,关于GTK的退出函数 iis7站长之家
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助(SHELL 脚本)进程的唯一性检查
  • 紧急求助!!!用CHKDSK/F检查磁盘,结果C盘下所有的文件的文件长度都变为0字节
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • linux的 iptables问题求助
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 一个简单的问题,高分求助!!!
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求助


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3