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等本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来