加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

无法为Java进程设置LD_LIBRARY_PATH

发布时间:2020-12-13 19:15:50 所属栏目:Linux 来源:网络整理
导读:我试图从shell脚本调用我的linux可执行文件.在调用此可执行文件之前,我想将LD_LIBRARY_PATH设置为具有特定值.我的shell脚本如下: Parent.sh(包含2行) - source set_env.sh - executable.so Set_env.sh - setenv LD_LIBRARY_PATH /proj/something 从linux控

我试图从shell脚本调用我的linux可执行文件.在调用此可执行文件之前,我想将LD_LIBRARY_PATH设置为具有特定值.我的shell脚本如下:

Parent.sh(包含2行)

   - source set_env.sh 
   - executable.so

Set_env.sh

   - setenv LD_LIBRARY_PATH /proj/something

从linux控制台手动执行Parent.sh scipt时,调用executable.so并正确设置LD_LIBRARY_PATH.但是在将它与java代码集成之后:

String[] commandArray ={"Parent.sh"};
Runtime runtime = Runtime.getRuntime();
Process javap = runtime.exec(commandArray);
javap.waitFor();

没有为executable.so设置LD_LIBRARY_PATH

我希望描述清楚:)

请告诉我们代码中有什么不对.

最佳答案
沙丘的答案解决了你的问题,但我强烈建议在这种特殊情况下使用不同的方法.您应该在Java代码中执行此操作,而不是依赖shell来设置环境参数.这样您就不需要知道系统中存在哪些shell以及它们的语言是什么,它只适用于所有平台.

为此,您可以使用Runtime.exec(String [] cmd,String []环境)重载(javadoc).作为第二个参数,您可以传递一个包含子进程将看到的所有环境变量的数组.

甚至更好一点是ProcessBuilder API:

ProcessBuilder pb = new ProcessBuilder("executable.so");
Map

这样,子进程将从Java进程继承所有环境变量,并另外设置LD_LIBRARY_PATH变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读