Windows和linux下静态库依赖差异
来源:互联网 发布:js获取网络标准时间 编辑:程序博客网 时间:2024/06/06 09:29
在linux下开发基于Intel IPP模块程序时,发现windows和linux对于静态库的依赖稍有差异,做个记录。
1. 编译:
抽象所碰到的问题:
可执行程序exe依赖于静态库liby,静态库liby依赖于libx。
windows下存在两种方案:
1. 在编译liby时,添加liby对于libx的依赖,则在编译exe时只需添加liby的依赖
2. 在编译liby时,不添加对libx的依赖,在编译exe时同时添加libx,liby的依赖
这两种方法window下都可行。但在采用1方法编译liby时,得到的liby大小会比2方法编译得到的liby要稍大,这也说明在方法1中,添加库的依赖时,liby把libx中的内容添加到库中。
而linux下只存在一种方案:
2. 调用
1. 所有库都以静态库形式提供。结果相同。
linux和window下都输出:
2. 所有库都以动态形式提供。结果相同。
linux和window下都输出:
3. liba和libb以静态库形式提供, libbase以动态库形式提供。结果相同。
linux和window下都输出:
4. liba和libb以动态库形式提供, libbase以静态库形式提供。结果不同。
linux下输出:
windows下输出:
1. 编译:
抽象所碰到的问题:
可执行程序exe依赖于静态库liby,静态库liby依赖于libx。
windows下存在两种方案:
1. 在编译liby时,添加liby对于libx的依赖,则在编译exe时只需添加liby的依赖
2. 在编译liby时,不添加对libx的依赖,在编译exe时同时添加libx,liby的依赖
这两种方法window下都可行。但在采用1方法编译liby时,得到的liby大小会比2方法编译得到的liby要稍大,这也说明在方法1中,添加库的依赖时,liby把libx中的内容添加到库中。
而linux下只存在一种方案:
1.在编译liby时,不添加对libx的依赖,只能在编译exe时同时添加libx,liby的依赖。
并且在链接静态库时,如果多个静态库之间存在依赖关系,则有依赖关系的静态库之间存在链接顺序问题。这在使用静态库时需要注意,否则会报符号找不到的链接错误。
例如:
lib1.a 依赖于 lib2.a,而最终可执行文件 test 依赖于 lib1.a,则链接选项应为:
-llib1.a -llib2.a,而不能反过来,否则会报 lib2.a 中的某些符号未定义。
2. 调用
可执行程序exe依赖于库liba和库libb,而库liba和库libb依赖于库libbase. liba,libb,libbase分别采用静态库和动态库形式输出,则最终exe的组织形式包括4种:
库libbasevoid Libbase(){ static int sIndex = 0; printf("This is base dll or lib. sIndex is %d.\n", sIndex++);}
库liba
void LibA{ printf("This is lib or dll a.\n"); Libbase();}库libb
void LibA{ printf("This is lib or dll b.\n"); Libbase();}可执行程序exe
void main(){ LibA(); LibB();}
1. 所有库都以静态库形式提供。结果相同。
linux和window下都输出:
This is lib or dll a.This is base dll or lib. sIndex is 0.This is lib or dll b.This is base dll or lib. sIndex is 1.可以看出baselib在exe中只存在1份数据。
2. 所有库都以动态形式提供。结果相同。
linux和window下都输出:
This is lib or dll a.This is base dll or lib. sIndex is 0.This is lib or dll b.This is base dll or lib. sIndex is 1.可以看出baselib在exe中只存在1份数据。
3. liba和libb以静态库形式提供, libbase以动态库形式提供。结果相同。
linux和window下都输出:
This is lib or dll a.This is base dll or lib. sIndex is 0.This is lib or dll b.This is base dll or lib. sIndex is 1.可以看出baselib在exe中只存在1份数据。
4. liba和libb以动态库形式提供, libbase以静态库形式提供。结果不同。
linux下输出:
This is lib or dll a.This is base dll or lib. sIndex is 0.This is lib or dll b.This is base dll or lib. sIndex is 1.可以看出baselib在exe中只存在1份数据。
windows下输出:
This is lib or dll a.This is base dll or lib. sIndex is 0.This is lib or dll b.This is base dll or lib. sIndex is 0.可以看出baselib在exe中只存在2份数据,在dll中存在自己的分配空间。
- Windows和linux下静态库依赖差异
- linux下静态库的依赖顺序
- linux下的静态库依赖
- socket在linux和windows下的差异
- snprintf linux 与 windows下差异
- snprintf linux 与 windows下差异
- windows和linux下查看dll依赖关系
- Windows下Console和Win32程序差异
- C语言memset函数详解(Linux下和windows下的差异)
- C语言memset函数详解(Linux下和windows下的差异)
- Qt文件遍历在linux下和windows下的差异
- Windows和Linux中Sleep()的差异
- 内存对齐的初步讲解--linux和windows平台下内存分配的差异
- 内存对齐的初步讲解--linux和windows平台下内存分配的差异
- 浅谈内存对齐--linux和windows平台下内存分配的差异
- 内存对齐的初步讲解--linux和windows平台下内存分配的差异
- maven打包pom文件在windows和linux下的格式差异
- Windows和Linux下的目标文件、静态库和动态库
- 我眼中的PHP
- 题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。
- 快速切换IP的批处理命令
- ipa 开发常用控件 : UISplitViewController , UIPopoverController
- Javascript继承2
- Windows和linux下静态库依赖差异
- C语言中的整数自动转换原则
- Javascript网页读取QRcode
- 安霸业务动态
- 我的第一个MPI并行程序
- 题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。
- 10.11复习笔记
- ADS的模型添加
- 页面乱码,没有中文