如何在 Linux 中为 Eclipse RCP 应用程序选择 gtk 版本?

如何在 Linux 中为 Eclipse RCP 应用程序选择 gtk 版本?

我有一个 Eclipse RCP 应用程序,想要在安装了多个 gtk 的 Linux 环境中运行。

有没有办法选择可以运行应用程序的 gtk 版本?

Linux 风格:openSUSE
窗口管理器:iceWM
gtk+ 安装版本:1.2.10 和 2.2.1

答案1

有可能。你可以使用命令检查程序加载的共享库LDD: 例如,

  # ldd /usr/sbin/openvpn
    linux-vdso.so.1 =>  (0x00007ffffb5fe000)
    liblzo2.so.2 => /lib/x86_64-linux-gnu/liblzo2.so.2 (0x00007fc3dc936000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc3dc719000)
    libpkcs11-helper.so.1 => /usr/lib/x86_64-linux-gnu/libpkcs11-helper.so.1 (0x00007fc3dc4ff000)
    libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fc3dc2a1000)
    libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fc3dbec5000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc3dbcc0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc3db8f8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc3dce22000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc3db6df000)

这显示了调用的所有库开放VPN. 以 结尾的库。儿子在哪里是一个数字(任何一位数字)实际上是指向真实图书馆的链接。libz.so.1举个例子:

 root@rasal:/lib/x86_64-linux-gnu# find / -type f -name 'libz.so.1*' -print
 /lib/x86_64-linux-gnu/libz.so.1.2.8
 /lib/i386-linux-gnu/libz.so.1.2.8

 root@rasal:/lib/x86_64-linux-gnu# ls /lib/x86_64-linux-gnu/libz.so.*
 /lib/x86_64-linux-gnu/libz.so.1  /lib/x86_64-linux-gnu/libz.so.1.2.8

 root@rasal:/lib/x86_64-linux-gnu# file /lib/x86_64-linux-gnu/libz.so.*
 /lib/x86_64-linux-gnu/libz.so.1:     symbolic link to `libz.so.1.2.8'
 /lib/x86_64-linux-gnu/libz.so.1.2.8: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x42bce97e9a0f7a78fcdb3b79d11f67b02abc522c, stripped

LDD命令显示已加载的库,libz.so.1(顺便说一下,这被称为共享库的 soname)解析为,以下命令找到该库,并显示 soname 实际上是指向共享库的真实的姓名。

您可能希望通过改变此链接来确定加载了哪个共享库。

对此有一些注意事项,其中最重要的是,虽然通常可以安全地替换同一主要版本的不同次要版本(例如,使用 libz.so.1.2.8 而不是 libz.1.1.6),但替换不同版本的主要的数字(后面的第一个数字所以)是不可能的。根据tldp.org 页面

程序在内部列出所需的共享库时,应该只列出所需的 soname。

这意味着你将无法替换属于不同版本的同一共享库的两个版本主要的版本。

无论如何,我建议参考上述链接以获得进一步的澄清。

相关内容