如何解决来自system的环境变量调用另一个程序
我当前正在用C ++构建守护进程,并且子进程由fork()
语句创建。孩子们正在监听来自Amazon SQS队列的传入事件,并且在流程的生命周期中一切正常。
从队列中读取新消息时,该进程必须执行一个外部二进制文件(已经在c ++中使用动态库编译)。该二进制文件的执行由system(my_binary_path);
语句完成。
问题是二进制文件需要在执行环境中已经设置DYLD_LIBRARY_PATH
,但实际上不是(因为执行是由子进程而不是当前用户会话进行的)。
我已经尝试直接从DYLD_LIBRARY_PATH
函数导出system("export DYLD_LIBRARY_PATH=<path-to-my-dylib-folder>")
env变量。我还尝试通过setenv("DYLD_LIBRARY_PATH",<path-to-my-dylib-folder>)
函数进行设置,该方法也不起作用。
我不知道设置env变量或使其与动态库一起工作的正确方法是什么,或者是否还有其他替代方法可以执行外部二进制文件。
谢谢您的帮助。
解决方法
您需要运行一个system()
调用,该调用将设置环境变量并运行程序。这样做:
system("DYLD_LIBRARY_PATH=<path-to-my-dylib-folder> my_binary_path")
相同的语法在常规shell中起作用:为指定的命令设置变量(而不是之后)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。