![如何设置 .so 以用于 LD_PRELOAD](https://linux22.com/image/1008999/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%20.so%20%E4%BB%A5%E7%94%A8%E4%BA%8E%20LD_PRELOAD.png)
我在运行 Docker 命令时遇到了一个问题:
ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (failed to map segment from shared object): ignored.
经过一番研究,我了解到无法找到 LD_PRELOAD 环境变量中提供的库。当我运行:
env | grep LD_
我回复说:
LD_PRELOAD=libgtk3-nocsd.so.0
通过 apt-get 安装这个 libgtk3 库后,我将其位于此处:
/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
设置 LD_PRELOAD 的正确方法是什么?我应该用库的完整路径覆盖它吗?还是应该以某种方式复制此库以使其全局可用,并将 LD_PRELOAD 保留为其当前值。
我尝试将其添加到我的~/.profile
:
unset LD_PRELOAD
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
但当我重新加载我的个人资料时,我得到了以下信息:
LD_PRELOAD=libgtk3-nocsd.so.0:/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
由于某种原因,取消设置不会清除变量,而只是将我的路径附加到现有值,这是行不通的。
答案1
我有同样的问题。我测试了LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
在终端中运行,它解决了该终端会话的问题。但是,当我重新启动终端时,问题又回来了。
谢谢桑杰·普拉贾帕特,我将命令添加到.bashrc
主文件夹中,并永久解决了该问题。但是,没有添加以下行:
export LD_PRELOAD=$LD_PRELOAD:/usr/lib/x86_64-linux-gnu/
这个对我有用:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
(如果有语法错误请见谅)。
编辑:
确保你libgtk3-nocsd.so.0
有/usr/lib/x86_64-linux-gnu
在 nautilus 中搜索
如果你没有,请尝试sudo apt-get install gtk3-nocsd
答案2
~/.bashrc
尝试在文件中添加以下行
export LD_PRELOAD=$LD_PRELOAD:/usr/lib/x86_64-linux-gnu/