你若向前 2022-03-21 09:55 采纳率: 100%
浏览 268
已结题

C/C++程序编译动态库时可以连接静态库么?

利用 C++ 程序编译动态库(使用到了 -fPIC -shared ),得到 so 文件,在链接的时候,可以指定静态库么?也就是说使用静态库链接。比如 -lssl_static 其中对应的静态库文件名字为 libssl_static.a。可以这么做么,如果可以的话,这样做会有什么不好的影响吗?
  • 写回答

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等

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月21日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来