c++ - 为什么在运行时更改 LD_LIBRARY_PATH 不会在可执行文件加载后反射(reflect)在可执行文件上

标签 c++ linux setenv getenv

我正在尝试从我的 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,因此更改它不会有任何效果。

关于c++ - 为什么在运行时更改 LD_LIBRARY_PATH 不会在可执行文件加载后反射(reflect)在可执行文件上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337926/

相关文章:

c++ - 每个进程设置环境变量?

linux - SETENV:错误:$ ($) 中的修饰符

c++ - 将空指针传递给 LLVM IRBuilder CreateCall

c++ - 检测共享库中变量的重复定义

php - 从 PHP 获取 FACL/SetFACL

linux - 我可以在已编译的二进制文件中更改 'rpath' 吗?

c++ - 如何提高 dnn_mmod_face_detection 示例的速度

c++ - 拆分用户在参数中输入的字符串

sql - lsof 如果文件描述符已打开

linux - 双引号对 Linux csh 中的 setenv 命令有什么影响吗?