关于linux静态库和动态库知识

比如ar cr libmain.a main.cpp main.h,那么ar -t libmain.a就会发现,其实libmain.a里面就是main.cpp,main.h而已。所以用ar打包时,只有打包.o文件是有用的,如果你希望把其他的lib打包进来,比如想打包libseg.a,使用 ar cr libmain.a main.o libseg.a,那你会发现,libmain.a里面就真的包含了libseg.a,而gcc解压识别的时候,是不会深入到libseg.a里面去加载它里面的.o文件的符号表的。

1、当静态库依赖静态库时,你可以把所以静态库都先解压,然后把所以.o都打包在一起,或者在编译程序的时候,加入依赖的静态库。

2、当静态库依赖动态库时,同理,由上面可知,由于静态库是没有链接过程的,只是打包,所以编译的时候也不需要加入动态库,在最后生成bin的时候加入动态库链接就行。

3、当动态库依赖动态库时,由于动态库是知道它依赖的动态库,是运行时加载的,所以不需要打包进动态库,在编译bin的时候链接,运行时候加载就行。

4、当动态库依赖静态库时,由于动态库是会编译以及链接的,所以我们需要加入静态库的依赖;当然如果没有把静态库链接进来,在编译最后bin的时候加入静态库依赖也是ok的。

猜你喜欢

转载自blog.csdn.net/chen_jianjian/article/details/82622091