为什么在运行时更改LD_LIBRARY_PATH在加载可执行文件后不反映可执行文件

Why change in LD_LIBRARY_PATH at Runtime dosen't Reflect on the Executable once the Executable gets loaded

本文关键字:可执行文件 加载 LIBRARY 运行时 LD 为什么 PATH      更新时间:2023-10-16

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

Failed to Load the shared library file

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

不幸的是,从正在运行的程序中设置LD_LIBRARY_PATH不会对其产生影响。 原因是LD_LIBRARY_PATH由动态链接加载程序 (ld.so) 处理,这是启动程序的程序。程序本身不处理LD_LIBRARY_PATH因此更改它不会产生任何影响。