链接静态库和动态库对符号处理的一些测试(4m/1,2/2)
[
2009/06/01 13:37 | by wirlfly ]
2009/06/01 13:37 | by wirlfly ]
前晚写了一段代码,用于测试Linux下典型的静态库和动态库对全局符号的不同处理.作为Linux C/CPP程序员,一般对静态库和动态库的使用都十分频繁,虽然也出现过静态库链接顺序导致符号无法解析的错误.但是大体理解静态库和动态库并不困难,但是真正理解静态库和动态库在链接和(或)加载过程中的原理,还是得深入阅读一些文档,写一些测试代码才能有直观的掌握.
如果您对测试过程不太感兴趣(确实这个过程比较乏味),请跳跃到最后一段,直接看结论即可.
给出测试代码(文末给出源码包,遵循GPL发布):
6个源代码文件(test_d.c,test.h,test_lib.c,test_lib.h,test_o.c,test_s.c).
1个Makefile(文末给出Makefile的内容,可以当作一个模板使用).
生成1个动态库文件(libtest_d.so),1个静态库文件(libtest_s.a),3个可执行目标文件(test_lib_d,test_lib_s,test_lib_o).
还有其他3个和源码文件(*.c)相对应的可重定位目标文件(*.o).
如果您对测试过程不太感兴趣(确实这个过程比较乏味),请跳跃到最后一段,直接看结论即可.
给出测试代码(文末给出源码包,遵循GPL发布):
6个源代码文件(test_d.c,test.h,test_lib.c,test_lib.h,test_o.c,test_s.c).
1个Makefile(文末给出Makefile的内容,可以当作一个模板使用).
生成1个动态库文件(libtest_d.so),1个静态库文件(libtest_s.a),3个可执行目标文件(test_lib_d,test_lib_s,test_lib_o).
还有其他3个和源码文件(*.c)相对应的可重定位目标文件(*.o).




