静态库的链接顺序
来源:互联网 发布:mac studded kiss试色 编辑:程序博客网 时间:2024/05/08 18:12
一个静态库若是调用了另外一个静态库的函数,在编译这个静态库的时候,只是会去找这个函数的声明,不会管这个函数是否有实现。所以在使用这个静态库的时候,得配合它所用的函数所在的静态库一起使用。
编译的时候找不到实现不会报错,但是链接的时候如果这个函数没有实现,则会报undefined错误。
静态库A源文件
int func_A()
{
func_B_in_lib_B();
}
此时只要找到func_B_in_lib_B()的声明就不会报错了。
静态库的链接顺序也有讲究,顺序不对,将会出现未定义错误。
在动态链接和静态链接的语义上有一个巨大差别,archive(静态库)与共享对象(动态库)的动作不同。在动态链接中,所有的库符号进入输出文件的虚拟地址空间中,所有的符号对于链接在一起的所有文件都是可见的。相反,对于静态链接,在处理archive时,它只是在archive中查找载入器当时所知道的未定义符号。因此,使用静态链接的过程中,引入静态链接库的顺序是很重要的。如果相同的符号在两个不同的静态链接库中都有定义,那么静态库出现的顺序不同,编译的结果就可能不同。
如果在自己的代码之前引入静态库,又会带来一个问题。因为此时尚未出现未定义的符号,所以它不会从库中提取任何符号。接着,当用户程序生成的目标文件被链接时,它的所有对函数库的引用都将是未实现的!因此,在进行编译时,始终将-l函数库选项放在编译命令选项的最右边
所以最原始的库,要放在最后面。比如这次libw使用了libnand的函数,链接顺序应该是这样:
-lw -lnand。
编译的时候找不到实现不会报错,但是链接的时候如果这个函数没有实现,则会报undefined错误。
静态库A源文件
int func_A()
{
func_B_in_lib_B();
}
此时只要找到func_B_in_lib_B()的声明就不会报错了。
静态库的链接顺序也有讲究,顺序不对,将会出现未定义错误。
在动态链接和静态链接的语义上有一个巨大差别,archive(静态库)与共享对象(动态库)的动作不同。在动态链接中,所有的库符号进入输出文件的虚拟地址空间中,所有的符号对于链接在一起的所有文件都是可见的。相反,对于静态链接,在处理archive时,它只是在archive中查找载入器当时所知道的未定义符号。因此,使用静态链接的过程中,引入静态链接库的顺序是很重要的。如果相同的符号在两个不同的静态链接库中都有定义,那么静态库出现的顺序不同,编译的结果就可能不同。
如果在自己的代码之前引入静态库,又会带来一个问题。因为此时尚未出现未定义的符号,所以它不会从库中提取任何符号。接着,当用户程序生成的目标文件被链接时,它的所有对函数库的引用都将是未实现的!因此,在进行编译时,始终将-l函数库选项放在编译命令选项的最右边
所以最原始的库,要放在最后面。比如这次libw使用了libnand的函数,链接顺序应该是这样:
-lw -lnand。
- 静态库的链接顺序
- 静态库的链接顺序
- 静态链接时链接库的顺序
- 链接静态库的顺序问题
- 交叉编译静态库的链接顺序
- 静态链接库的依赖顺序
- gcc中动态库和静态库的链接顺序
- gcc中动态库和静态库的链接顺序
- gcc中动态库和静态库的链接顺序
- Linux下链接静态库的顺序问题
- Linux静态、动态库的链接顺序问题
- 由于gcc静态链接库顺序引起的问题
- unix下静态库的链接顺序问题(zz)
- Linux下链接静态库的顺序问题
- android静态库链接顺序问题
- gcc/g++动态链接库和静态库的链接顺序
- 静态库与动态库链接、执行时的搜索路径顺序
- eclipse中静态链接库的 链接
- 算法导论 3.1-3
- div + css div中的内容垂直居中
- ccnet 添加nuget包编译自动下载包
- Android中回调函数
- SAP各种凭证的取消小结
- 静态库的链接顺序
- Ext权限设计
- 两篇文章说中断和异常之一
- 不可不知的嵌入式工程师经验
- Unicode汉字编码表
- windows下的ios log工具
- 快速镜像同步(Fast Mirror Resync)
- zeromq解决了什么问题
- PeopleSoft 学习笔记 全球薪资 第 4 章 系统元素