在一个工程中使用了不同版本的静态库的问题分析
来源:互联网 发布:天龙八部mac版下载 编辑:程序博客网 时间:2024/06/04 18:12
在一个项目中,模块A链接了poco的1.6.1版本静态库。
后来发现解析json抛异常。
但是独立的demo中却正常。
通过排查发现,项目中的其他模块集成了poco 1.5的版本静态库。
而通过poco的文档发现,json在1.5的版本中确实存在bug,而在1.6的版本中修复了此bug。
问题就是:明明是静态链接,为什么还会互相影响?
于是写了个demo简单模拟了一份代码里调用了不同版本静态库的同一个函数的情况。
test.h
extern int add(int, int);
test1.c
int add(int a, int b){ return a+b;}
test2.c
int add(int a, int b){ return a*b;}
main.c
#include <stdio.h>#include "test.h"int main(){ int sum = add(2,5); printf("sum = %d\n", sum); return 0;}
// 静态库1gcc -o test1.o -c test1.c // test1.oar -v -q libtest1.a tst1.o // libtest1.a// 静态库2gcc -o test2.o -c test2.c // test2.oar -v -q libtest2.a tst2.o // libtest2.a// 把不同版本的静态库都链接进去,只是链接顺序不同gcc -o main1 main.c -L. -ltest1 -ltest2gcc -o main2 main.c -L. -ltest2 -ltest2// 观察输出结果./main1 -- 输出sum=7./main2 -- 输出sum=10
上述结果很好的说明了问题:
在不同版本的静态库中,同一个函数,如果符号名,参数都没有改变的情况下,内存中是只保留一份先加载的那份代码。
ps:其实打印一下函数地址会更直观,不过demo写完就不想改了,能说明问题就行了
0 0
- 在一个工程中使用了不同版本的静态库的问题分析
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 转载:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 转:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 转:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 148 Sort List [Leetcode]
- fs4412开发板学习笔记(二十一)
- SpringMVC-----5、SpringMVC静态文件访问
- [Leetcode]Permutations II
- hadoop-2 HDFS API
- 在一个工程中使用了不同版本的静态库的问题分析
- SpringMVC-----6、SpringMVC注解启用
- SpringMVC-----7、SpringMVC和json结合传递数据
- 繁忙的大三
- Oracle asm中 Usable_FILE_MB 和 REQUIRED_MIRROR_FREE_MB的含义
- SpringMVC-----8、SpringMVC上传文件
- hihocoder 1157 : 建造金字塔
- 不不不!我要认真写博客!--Django的安装
- SpringMVC-----9、SpringMVC拦截器