在NodeJS / Express服务器上运行具有共享库依赖关系的二进制文件

时间:2018-08-20 11:57:35

标签: node.js shell express binary child-process

我正在使用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中运行二进制文件,并已经对其进行了测试。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以通过将环境变量LD_LIBRARY_PATH设置为public/libraries目录的绝对路径来解决此问题。

类似这样的东西:

spawn('/path/to/binary/file', ['-someoption'],
      {env: {LD_LIBRARY_PATH: '/path/to/public/libraries'}})