2条回答 默认 最新
- bostonAlen 2022-03-21 10:40关注
当然可以,比如你现在需要编译一个targer.so,而你的这个targer.so依赖于a、b、c三个模块的库,而a、b、c这三个模块有静态库(liba.a、libb.a、libc.a)也有动态库(liba.so、libb.so、libc.so),这个时候链接动态库和静态库两种方法都可以,
区别是
1、使用静态库编译后的targer.so文件比较大,里面包含了abc三个模块的函数符号,但是运行时仅仅target.so就能独立运行
2、使用动态库编译后的targer.so文件小,但是运行target.so时,需要加载其他abc三个模块的.so,这样才能找到运行的函数并解析符号,才能运行。
这其实看你的这个so是怎么用,如果是你需要写一个so,发给你的同事们用,那其实建议你可以用静态库编,当然这只是说说,具体情况还得看你项目,这样你就这需要发这一个so给你的同事,他们就可以基于你的so开发了。如果你用动态库编译的这个库,那你需要发给你同事这个so还有这个so依赖的abc三个so。
还可以混合编译,就是说一部分用静态库,一部分用动态库,就像这里的targer.so,a、b模块我使用动态库,而c模块我是用静态库,这样也是可行的,但使用动态库的部分需要运行时加载so。
具体怎么用你可以看看gcc的编译参数-l、-wl、-o、-c等本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录