【发布时间】:2013-10-12 18:53:04
【问题描述】:
我正在尝试从我的 C++ 程序中更改 LD_LIBRARY_PATH。我可以使用getenv("LD_LIBRARY_PATH") 获取它的值并使用setenv() 设置它的值(我知道这是有效的,因为当我再次调用getenv("LD_LIBRARY_PATH") 时,我得到了更新的值),但是从程序内部对其没有任何影响:我仍然收到此错误消息:
Failed to Load the shared library file
如果我在加载可执行文件或启动应用程序之前设置值,它可以正常工作。
【问题讨论】:
-
我会简单地编写一个 shell 包装器,在
exec之前适当地设置LD_LIBRARY_PATH-ing 二进制 ELF 可执行文件。这是常见的做法(大多数发行版都为firefox这样做) -
嗨Basile感谢您的正确回复。正如你所说,我正在尝试编写一个 shell 包装器,但问题是我需要将脚本作为 . filename.sh (在终端中)然后只有导出路径有效。如果我尝试在系统启动时启动我的应用程序,我将无法达到同样的效果。
-
不,只是
chmod a+x filename.sh,将filename.sh放在PATH的某个目录中,您可以简单地以filename.sh运行它 -
我在系统启动时使用 application.sh 启动我的应用程序,它执行 filename.sh(设置路径的 shell 脚本)但它不起作用,路径未设置
-
然后使用完整路径,例如
$HOME/bin/filename.sh或/usr/local/bin/filename.sh。查看内部firefox或mozilla;它通常是一个shell脚本......