1.编译文件的位置对编程有影响。
当编译连接的是静态库时, a.c的位置就很主要。
编译连接的是动态库时,随便都是OK的。
2 。库之间有依赖关系时库的先后顺序对编程存在影响
libtest.so -> libtest1.a (libtest.so 依赖libtest1.a)
libtest.a-> libtest1.a (libtest.a 依赖libtest1.a)
libtest.a-> libtest1.so (libtest.a 依赖libtest1.so)
libtest.so-> libtest1.so (libtest.so 依赖libtest1.so)
由上述实验现象可以看出:只有当被依赖的库是静态库时,它的先后顺序对编程有影响。
应该遵循从左到右的顺序来排序对象文件。
3.使用-Xlinker来实现重复查找库文件,而不用关系它的依赖关系
4. 链接共享库和链接静态库有什么区别呢?
在链接libc
共享库时只是指定了动态链接器和该程序所需要的库文件,并没有真的做链接,可执行文件main
中调用的libc
库函数仍然是未定义符号,要在运行时做动态链接。而在链接静态库时,链接器会把静态库中的目标文件取出来和可执行文件真正链接在一起。