社区
C语言
帖子详情
linux下编译C源文件链接库顺序问题
寻找Python之禅
2011-11-01 07:42:37
今天在编译一个C可执行程序时,连接啦两个自定义静态库,在这两个库里都有一个相同名称的函数,参数列表也完全一样,只有函数体内容有些许区别。执行可执行程序后发现结果不是想要的。后来把两个静态库的属性对调啦一下,再次执行可执行程序后就得到啦想要的结果。 编译时是如何确定使用两个库中相同名称的函数中的哪一个的?请求各位高人给以解答,另希望高人们传授这方面的详细知识,谢谢!
...全文
365
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
- 通过gcc命令,可以将C语言
源文件
(.c)
编译
成可执行文件。 - 示例:使用`gcc -o hello hello.c`来
编译
一个名为hello.c的
源文件
,指定输出的可执行文件名为hello。 #### 2. Makefile的编写 - Makefile是一个自动...
Linux
下C语言编程基础(Makefile)
在深入探讨
Linux
环境下C语言编程与Makefile的运用之前,我们先来理解一下标题和描述中提及的关键概念:
Linux
、C语言以及Makefile。 ###
Linux
环境下的C语言编程
Linux
作为全球广泛使用的开源操作系统,其核心是用...
Linux
下的makefile的
在
编译
源文件
时,每个
源文件
都应该对应一个中间目标文件。而在链接时,如果
源文件
非常多,直接指定中间目标文件会非常不便。因此,我们通常将这些中间目标文件打包成库文件,在Windows下为.lib文件,在UNIX下为.a...
makefile编写,学习
linux
c编程的必备
每个规则描述了如何生成目标文件,如
编译
源文件
并链接成可执行文件。
编译
过程通常分为两个步骤:**
编译
(Compile)**和**链接(Link)**。
编译
阶段,C/C++
源文件
(`.c`或`.cpp`)被
编译
器转换成目标文件(`.o`),...
gcc 入门 (An Introduction to GCC)
- **库的链接
顺序
**:链接时库的
顺序
会影响程序的行为。 - **头文件使用**:外部库通常包含头文件,这些头文件定义了库接口,需要在源代码中通过`#include`指令引用。 #### 七、
编译
选项详解 - **搜索路径设置**:...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章