netlink, link 到 libnl-3 和 libnl-1

netlink, link to libnl-3 and libnl-1

我有一个使用 libnl 的应用程序。它可以使用任一版本(1 或 3),并且在配置期间它首先尝试使用 ibnl3,如果未找到 libnl3,则回退到 libnl-1。

我的应用程序使用了另一个也使用 libnl 的库。 问题是我的机器上只有 libnl1-dev 所以我的应用程序必须使用它。 但是我使用的库使用 libnl3(我猜它是用 yum 安装的,它是静态链接的) 所以我有两个版本,但我的应用程序崩溃了!!

这里有一些印刷品

ldd myapp.so|grep libnl
        libnl.so.1 => /lib64/libnl.so.1 (0x00007fda33eb5000)
        libnl-route-3.so.200 => /lib64/libnl-route-3.so.200 (0x00007fda32a3d000)
        libnl-3.so.200 => /lib64/libnl-3.so.200 (0x00007fda3281b000)

yum list|grep libnl
    libnl.x86_64                            1.1.4-3.el7               
    libnl-devel.x86_64                      1.1.4-3.el7               
    libnl3.x86_64                           3.2.28-2.el7              
    libnl3-cli.x86_64                       3.2.28-2.el7              
    libnl.i686                              1.1.4-3.el7                
    libnl-devel.i686                        1.1.4-3.el7                
    libnl3.i686                             3.2.28-2.el7               
    libnl3-cli.i686                         3.2.28-2.el7               

如果安装 libnl3-dev 可以解决问题 还有其他解决方案吗?

if I install libnl3-dev it fixes the issue is there another solution?

还有其他解决方案,但底线是您只能有 libnl.so.1 libnl-3.so.200,但不能同时有。

通过 "going all in on libnl-3" 解决此问题是最简单的解决方案。

替代方案是 "go all on on libnl-1",这意味着从源代码重建任何需要 libnl-3 的内容(相对于 libnl-1)。这是假设您的其他依赖项 可以 完全针对 libnl-1 构建(这绝不是保证)。