运行 一个在 NodeJS / Express 服务器上具有共享对象依赖关系的二进制文件
Run a binary file with shared object dependencies on NodeJS / Express server
我在 NodeJS/Express 服务器 (localhost) 上使用 NodeJS childprocess 到 运行 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']);
错误信息是'error while loading shared libraries ... no such file or directory',意思是找不到共享对象。我不知道如何
1) 告诉'runBinary'共享对象文件夹的位置,然后
2) 运行 二进制文件成功在控制台创建输出。
我已经为 运行 Bash shell 中的二进制文件安装了所有必要的工具,并且已经测试它可以正常工作。
有什么想法吗?
您可以通过将环境变量 LD_LIBRARY_PATH
设置为 public/libraries
目录的绝对路径来解决此问题。
像这样:
spawn('/path/to/binary/file', ['-someoption'],
{env: {LD_LIBRARY_PATH: '/path/to/public/libraries'}})
我在 NodeJS/Express 服务器 (localhost) 上使用 NodeJS childprocess 到 运行 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']);
错误信息是'error while loading shared libraries ... no such file or directory',意思是找不到共享对象。我不知道如何
1) 告诉'runBinary'共享对象文件夹的位置,然后
2) 运行 二进制文件成功在控制台创建输出。
我已经为 运行 Bash shell 中的二进制文件安装了所有必要的工具,并且已经测试它可以正常工作。
有什么想法吗?
您可以通过将环境变量 LD_LIBRARY_PATH
设置为 public/libraries
目录的绝对路径来解决此问题。
像这样:
spawn('/path/to/binary/file', ['-someoption'],
{env: {LD_LIBRARY_PATH: '/path/to/public/libraries'}})