cmake扩展(4)——解决linux库版本冲突问题

文章讨论了一个项目中由于两个自定义库使用不同OpenCV版本引发的符号冲突问题。通过在其中一个库的CMakeLists中添加-Wl,--exclude-libs,ALL和-Wl,-Bsymbolic标志,将其编译为静态库,从而避免了动态链接时的冲突,确保了程序的正常运行。
摘要由CSDN通过智能技术生成

背景:

在一个项目中引用了两个自己开发的库,而这两个库都直接或间接的调用了opencv,且两者调用的opencv版本不一样,导致打包运行时opencv符号冲突,导致崩溃。

解决的方案:

参考解决Linux多个动态库间的符号冲突问题,在其中一个库的cmakelists中添加-Wl,--exclude-libs,ALL和-Wl,-Bsymbolic标志,并编译成静态库解决。

原理:

通过添加这两个标志(其中任意一个都可以),表示当前库以及引用的库并不对外导出接口,且因为是静态库,所以当前库调用的opencv则被打包到静态库中,调用时无需链接外部的相关动态库,因此解决了opencv符号冲突的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值