我正在使用NodeJS childprocess在NodeJS / Express服务器(本地主机)上运行Shell命令。一切都可以通过基本的shell命令(例如“ ls”(来自NodeJS文档):
const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
现在,我需要做的是运行具有共享对象依赖性的二进制文件。这些对象位于服务器文件夹'public / libraries'中。我试图用
修改前一个const runBinary = spawn('/path/to/binary/file', ['-someoption', 'public/libraries']);
错误消息是'加载共享库时出错...没有此类文件或目录',表示找不到共享库。我不知道如何
1)告诉'runBinary'共享对象文件夹的位置,然后
2)成功运行二进制文件以在控制台中创建输出。
我已经安装了所有必需的工具,以便在Bash shell中运行二进制文件,并已经对其进行了测试。
有什么想法吗?
答案 0 :(得分:1)
您可以通过将环境变量LD_LIBRARY_PATH
设置为public/libraries
目录的绝对路径来解决此问题。
类似这样的东西:
spawn('/path/to/binary/file', ['-someoption'],
{env: {LD_LIBRARY_PATH: '/path/to/public/libraries'}})