一个大的 Target 包含多个不同厂商的 so,导致名字冲突的问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
James369
V2EX    Linux

一个大的 Target 包含多个不同厂商的 so,导致名字冲突的问题?

  •  1
     
  •   James369 Aug 30, 2022 2175 views
    This topic created in 1336 days ago, the information mentioned may be changed or developed.

    一个比较大的 Target ,依赖了 A 厂商和 B 厂商提供的 2 个模块(主要以 so 形式,称之为 A.soB.so ),依赖关系如下:

    Target: ( A.so + B.so + xxx) 

    现在的问题是,恰巧 A,B 厂商都使用了同样的子模块,假设都使用了 ffmpeg 技术,此时有 2 种场景: 一种走动态库,如下依赖:

    A.so: (ffmpeg.v1.so) B.so: (ffmpeg.v2.so) 

    问题 1:此时如果两家使用 ffmpeg 的版本不管一致或不一致,能否编译链接成功,最终 Target 是否会有问题?

    另一种走静态库,如下依赖:

    A.so: (ffmpeg.v1.a) B.so: (ffmpeg.v2.a) 

    问题 2:此时不管 ffmpeg 的版本一致或不一致,能否编译链接成功,最终 Target 是否会有问题?

    引申问题 3:是否有某种类似沙盒 /命名空间的技术,将不同厂商的 so 限定在各自的命名空间之内,不管他们依赖何种代码模块,都可以成功链接进 Target 。这样子就可以集成任意多个厂商的库,而无需担心冲突的问题。

    6 replies    2022-08-30 22:08:58 +08:00
    Monad
        1
    Monad  
       Aug 30, 2022
    emmm 怎么看起来像是面试题?
    rev1si0n
        2
    rev1si0n  
       Aug 30, 2022
    看看能不能用相同版本呗,逻辑不复杂或许直接链接到同一个都能用,塞两个 ffmpeg 不大吗,你可以再塞两个 opencv 看看
    James369
        3
    James369  
    OP
       Aug 30, 2022
    @Monad 你是在夸我排版好看,措辞清晰吗?嘿嘿
    James369
        4
    James369  
    OP
       Aug 30, 2022
    @rev1si0n 这里说 ffmpep 只是个举例,更多情况可能是某某 json 处理库,网络库,等等非一流的库。
    nuk
        5
    nuk  
       Aug 30, 2022
    还真的遇到过一样的问题,openssl1.0 和 openssl1.1 的问题,最后做了静态链接,如果动态链接的话可以看看这个
    https://blog.habets.se/2012/05/Shared-libraries-diamond-problem.html ,so 要重新编译修改导出符号。
    windows 上就好解决了,写个 manifest 就好。
    James369
        6
    James369  
    OP
       Aug 30, 2022
    @nuk 不错。最近比较忙,改天有空做下实验
    About     Help     Advertise     Blog     API     FAQ     Solana     4232 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 05:29 PVG 13:29 LAX 22:29 JFK 01:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86