【发布时间】:2016-09-22 03:25:07
【问题描述】:
我已经构建安装 libpcap 1.7.4。
现在想通过yum安装wireshark,但是提示需要依赖libpcap 1.4.0。
如何通过yum安装wireshark,但是使用自己安装的依赖libpcap 1.7.4。
【问题讨论】:
我已经构建安装 libpcap 1.7.4。
现在想通过yum安装wireshark,但是提示需要依赖libpcap 1.4.0。
如何通过yum安装wireshark,但是使用自己安装的依赖libpcap 1.7.4。
【问题讨论】:
原则上你不能。 CentOS 存储库中的 Wireshark 动态链接到 libpcap 包中的 libpcap。 wireshark 二进制知道要搜索什么(我的wireshark 编译为wireshark-gtk):
$ readelf -d /usr/bin/wireshark-gtk | grep libpcap
0x0000000000000001 (NEEDED) Shared library: [libpcap.so.1]
它将在动态库路径中搜索libpcap.so.1。 yum 知道这一点(因为打包者在制作 RPM 时很小心)并且不允许您在不安装该库的情况下安装 wireshark。不管你自己编译什么,负责打包的人都没有看到,所以yum不会考虑。
对此绝对无能为力。如果要通过yum安装wireshark,需要安装libpcap-1.4.0。然而,这并不意味着您需要在运行 wireshark 时使用 libpcap-1.4.0。
出于测试目的,GNU ld(包含共享库的链接器)理解名为 LD_LIBRARY_PATH 的环境变量。首先搜索该变量中的路径(目录)以加载要加载的共享库。因此,您可以执行以下操作:
$ export LD_LIBRARY_PATH=/path/to/your/compiled/libpcap
$ wireshark
这将加载wireshark,同时将libpcap从给定的路径加载到内存中,而不是yum(在/usr/lib中)安装的libpcap。请注意,您需要确保有一个名为 libpcap.so.1 的软链接指向 libpcap.so.1.7.4(make 应该已经创建了它)。
免责声明:这可能会破坏!在生产环境中使用LD_LIBRARY_PATH 是一个非常糟糕的主意(但wireshark 不是一个经常用于关键任务环境的软件)。您现在不依赖于发行版维护者(他们在最新系统的场景中测试他们的包),而是依赖于 wireshark 和 libpcap 的开发人员,以小心不要引入破坏的向后兼容性(通常没有经过测试)。
理论上不会有任何问题,因为共享库中的 sonames 应该是向后兼容的。即libpcap-1.7.4 应该完全向后兼容libpcap-1.4.0。但有时会弹出向后兼容性问题。
【讨论】: