我正在尝试从我的C++程序中更改LD_LIBRARY_PATH
。我可以使用getenv("LD_LIBRARY_PATH")
获取其值,并使用setenv()
设置其值(我知道这个方法是有效的,因为当我再次调用getenv("LD_LIBRARY_PATH")
时,我得到了更新后的值),但是在程序内部更改它的值并没有任何效果: 我仍然会收到以下错误信息:
未能加载共享库文件
如果在可执行文件被加载或应用程序启动之前设置该值,则运行正常。
很遗憾,从正在运行的程序中设置LD_LIBRARY_PATH
将不会对其产生影响。原因是LD_LIBRARY_PATH
由动态链接加载器(ld.so)处理,该程序启动您的程序。您的程序本身不处理LD_LIBRARY_PATH
,因此更改它将没有任何效果。
dlopen
加载插件后调用,否则更改LD_LIBRARY_PATH
不会产生任何影响。 - Basile Starynkevitch
LD_LIBRARY_PATH
。这是常见的做法(大多数发行版都为firefox
这样做)。 - Basile Starynkevitchchmod a+x 文件名.sh
,将文件名.sh
放入您PATH
中的某个目录中,然后您就可以简单地运行它作为文件名.sh
。 - Basile Starynkevitch$HOME/bin/filename.sh
或/usr/local/bin/filename.sh
。查看firefox
或mozilla
中的内容;它通常是一个 shell 脚本... - Basile Starynkevitch