为什么在运行时更改LD_LIBRARY_PATH dosen一旦Executable被加载就反映在Executable上

时间:2013-10-12 18:53:05

标签: c++ linux setenv getenv

我正在尝试从我的C ++程序中更改LD_LIBRARY_PATH。我可以使用getenv("LD_LIBRARY_PATH")获取其值并使用setenv()设置其值(我知道这是有效的,因为当我再次调用getenv("LD_LIBRARY_PATH")时,我会获得更新的值) ,但是从程序内部更改其值对它没有任何影响:我仍然收到此错误消息:

  

Failed to Load the shared library file

如果我在加载可执行文件或启动应用程序之前设置了值,那么它可以正常工作。

1 个答案:

答案 0 :(得分:10)

不幸的是,在正在运行的程序中设置LD_LIBRARY_PATH对它没有任何影响。原因是LD_LIBRARY_PATH由动态链接加载器(ld.so)处理,它是启动程序的程序。您的程序本身不会处理LD_LIBRARY_PATH,因此更改它将无效。