【问题标题】:Environment variables from a system() call another program [duplicate]来自 system() 的环境变量调用另一个程序 [重复]
【发布时间】:2020-09-01 09:23:49
【问题描述】:

我目前正在用 C++ 构建一个守护进程,子进程由 fork() 语句创建。孩子们正在监听来自 Amazon SQS 队列的传入事件,并且在进程的生命周期循环中一切正常。

当从队列中读取一条新消息时,该进程必须执行一个外部二进制文件(已在 c++ 中使用动态库编译)。这个二进制文件的执行是由system(my_binary_path); 语句完成的。

问题是二进制文件需要DYLD_LIBRARY_PATH 已经在执行环境中设置,但它不是(因为执行是由子进程而不是当前用户会话进行的)。

我已经尝试直接从system("export DYLD_LIBRARY_PATH=<path-to-my-dylib-folder>") 函数导出DYLD_LIBRARY_PATH 环境变量。我也试过通过setenv("DYLD_LIBRARY_PATH", <path-to-my-dylib-folder>)函数设置,也没用。

我不知道设置 env 变量或使其与动态库一起使用的正确方法是什么,或者是否有任何其他替代方法可以执行外部二进制文件。

提前感谢您的帮助。

【问题讨论】:

标签: c++ c++11


【解决方案1】:

您需要运行一个 system() 调用来设置环境变量并运行程序。这样做:

system("DYLD_LIBRARY_PATH=<path-to-my-dylib-folder> my_binary_path")

相同的语法在常规 shell 中起作用:为指定的命令设置变量(而不是之后)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多