【问题标题】:GTK, How to get apps to use a modified libgtk?GTK,如何让应用程序使用修改后的 libgtk?
【发布时间】:2012-11-20 03:30:39
【问题描述】:

/opt 中,我解压了一个GTK 压缩包,以较小的方式修改了几个.c 文件,运行./configure(没有任何选项)和make(但不进行安装),然后运行一个GTK测试以确认我的更改已实施。他们是。

我将 linux 发行版的 libgtk 重命名为 /usr 以备份它。在此位置,我创建了一个符号链接,指向 /opt 中的 libgtk,其中包含我的模组。

我已经为 2.0 和 3.0 版本执行了此操作。

但应用程序,例如 Firefox,似乎仍在使用该发行版的默认库。

我缺少哪些步骤?

【问题讨论】:

  • 可能需要运行/sbin/ldconfig,但我不知道它是否会喜欢你的符号链接,至少从我阅读文档来看。
  • @ergosys - 谢谢,这似乎是正确的轨道!我再次查看了所有的符号链接。有些不是我想要的。我手动将符号链接的级联重新制作为正确的,以/opt 中修改后的libgtk 的符号链接结尾。成功:应用程序使用了修改后的版本。然后我再次运行 ldconfig,它重写了级联以使用原始(重命名)libgtk。我有时注意到 apt-get 会运行 ldconfig。这一定是让我搞砸的原因。我想我需要阅读有关配置 ldconfig 的内容。 grep gtk /etc/ld.so.conf.d/* 没有返回匹配项
  • @ergosys:这应该是一个答案,而不是评论......
  • @liberforce,我的政策是只有在我确定时才回答。

标签: gtk ld


【解决方案1】:

我将在 ergosys 中添加关于运行 ldconfig 的评论,您可能想要做的是将路径添加到您的自定义版本库目录(类似于 /opt/gtk-2.xx-customized/lib 或 @ 987654323@ 使用正确的版本号)在/etc/ld.so.conf。之后以 root 身份运行ldconfig,它应该会更新链接器缓存。但是,需要在系统路径之前指定自定义版本的路径。这样,更改是系统范围的,并且您不会弄乱您的发行版创建的文件,这将取悦您的包管理器。原始版本和定制版本将位于不同的目录中,便于维护。像这样使用--prefix 选项:./configure --prefix /opt/gtk-2.xx-customized 指定安装构建软件的位置。请记住之前创建该目录,并授予您的用户相应的写入权限。

请阅读man ldconfig了解更多信息。

如果您出于某种原因只想偶尔运行一次使用原始库集的应用程序,只需使用LD_LIBRARY_PATH 环境变量指向您要在@987654330 已知的所有其他目录之前检查的目录@,这一次是你原来的图书馆所在的地方。语法为LD_LIBRARY_PATH="/usr/lib" name-of-your-application。不要忘记在 64 位系统上,库目录可能被命名为 lib64。

【讨论】:

  • 谢谢,这也有效,而且比我的手动符号链接更干净。不过一些细节:如果前缀是$where,那么/etc/ld.so.conf 中的对应行需要是$where/lib,一次性命令:LD_LIBRARY_PATH="$where/lib" name-of-your-application
【解决方案2】:

我想我已经解决了。我已通过以下方式备份了原始 libgtk 点附加到它的名字。例如,

libgtk-x11-2.0.so.0.2400.10

改名为

libgtk-x11-2.0.so.0.2400.10.original

现在,我将点更改为破折号:.original-original ... ldconfig 现在似乎忽略了备份副本,这很好。

以下对 ldconfig 是健壮的:

lrwxrwxrwx  libgtk-3.so -> libgtk-3.so.0
lrwxrwxrwx  libgtk-3.so.0 -> libgtk-3.so.0.400.2.alt
lrwxrwxrwx  libgtk-3.so.0.400.2 -> libgtk-3.so.0.400.2.alt
-rw-r--r--  libgtk-3.so.0.400.2-original
lrwxrwxrwx  libgtk-3.so.0.400.2.alt -> /opt/gtk/gtk+-3.4.2/gtk/.libs/libgtk-3.so.0.400.2

lrwxrwxrwx  libgtk-x11-2.0.so -> libgtk-x11-2.0.so.0
lrwxrwxrwx  libgtk-x11-2.0.so.0 -> libgtk-x11-2.0.so.0.2400.10.alt
lrwxrwxrwx  libgtk-x11-2.0.so.0.2400.10 -> libgtk-x11-2.0.so.0.2400.10.alt
-rw-r--r--  libgtk-x11-2.0.so.0.2400.10-original
lrwxrwxrwx  libgtk-x11-2.0.so.0.2400.10.alt -> /opt/gtk/gtk+-2.24.10/gtk/.libs/libgtk-x11-2.0.so.0.2400.10

【讨论】:

  • 上述使用手动符号链接的方法确实工作得很好,但是建议 ldconfig 的人走上了更好、更干净、更优雅的轨道,尽管他们的做法更官僚。无论如何,我已经转换为他们的建议,因此我点击了复选标记以接受他们的回答。谢谢大家!
  • 感谢您接受我的回答。以这种方式使用符号链接的主要问题是,一旦您的发行版发布更新(考虑错误修复、安全性)更新 GTK,您将破坏您的更改。链接将被包管理器覆盖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多