社区
C语言
帖子详情
linux下编译C源文件链接库顺序问题
寻找Python之禅
2011-11-01 07:42:37
今天在编译一个C可执行程序时,连接啦两个自定义静态库,在这两个库里都有一个相同名称的函数,参数列表也完全一样,只有函数体内容有些许区别。执行可执行程序后发现结果不是想要的。后来把两个静态库的属性对调啦一下,再次执行可执行程序后就得到啦想要的结果。 编译时是如何确定使用两个库中相同名称的函数中的哪一个的?请求各位高人给以解答,另希望高人们传授这方面的详细知识,谢谢!
...全文
366
4
打赏
收藏
linux下编译C源文件链接库顺序问题
今天在编译一个C可执行程序时,连接啦两个自定义静态库,在这两个库里都有一个相同名称的函数,参数列表也完全一样,只有函数体内容有些许区别。执行可执行程序后发现结果不是想要的。后来把两个静态库的属性对调啦一下,再次执行可执行程序后就得到啦想要的结果。 编译时是如何确定使用两个库中相同名称的函数中的哪一个的?请求各位高人给以解答,另希望高人们传授这方面的详细知识,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lengxujun
2011-11-01
打赏
举报
回复
[Quote=引用 2 楼 seucs 的回复:]
在gcc中,静态库的链接是按照你给的 -l 选项的顺序从左往右依次扫描的,你想要连接函数要放在最左边,如 liba 里面有一个 void hello(); 函数, libb 里面也有一个函数原型和 liba一模一样的函数,如果你需要调用的是 liba 中的,则给的链接顺序应为: -la -lb ,即 liba在前
若你想要链接libb里面的hello函数,则应将链接选项的顺序写为: -lb -l……
[/Quote]
更详细的细节可参考ld文档:
http://sourceware.org/binutils/docs/ld/index.html
柯本
2011-11-01
打赏
举报
回复
新版的gcc中,缺省情况下,重复定义是要报错的
multiple definition of 'xxx'
但ld有个选项,--allow-multiple-definition充许重复定义.
在gcc中可以这样写
gcc -Wl,--allow-multiple-definition ...
库/源文件/.o文件的编译/连接顺序为从左到右
也说是说连接时,从左边开始,只要找到合适的函数,就先会加入程序
seucs
2011-11-01
打赏
举报
回复
在gcc中,静态库的链接是按照你给的 -l 选项的顺序从左往右依次扫描的,你想要连接函数要放在最左边,如 liba 里面有一个 void hello(); 函数, libb 里面也有一个函数原型和 liba一模一样的函数,如果你需要调用的是 liba 中的,则给的链接顺序应为: -la -lb ,即 liba在前
若你想要链接libb里面的hello函数,则应将链接选项的顺序写为: -lb -la,即 libb在前
qq120848369
2011-11-01
打赏
举报
回复
这个不重定义就不错了。
linux
操作系统下c语言编程入门.pdf
linux
操作系统下c语言编程入门.pdf
Linux
下C语言编程基础(Makefile)
这是一个学习C语言的有关MAKEFILE的文章;
Linux
下的makefile的
Linux
下的makefile的编程指南,本文详细介绍了
Linux
下的makefile如何使用
makefile编写,学习
linux
c编程的必备
makefile编写,学习
linux
c编程的必备,makefile编写,学习
linux
c编程的必备
gcc 入门 (An Introduction to GCC)
一本讲使用gcc编程的书,非常适合于初学者,讲得深入浅出。我读了之后很快入门了。
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章