【发布时间】:2019-08-17 15:24:12
【问题描述】:
对于比我更熟悉 NodeJS 的人可能有一个明显的答案,但是:
当运行一个使用 node-gyp 包的应用程序时,它运行没有问题
node ./src/index.js
但是使用一个非常简单的package.json start-script 运行它:
"scripts": {
"start": "node ./src/index.js"
}
在 npm 中:
npm start
npm info it worked if it ends with ok
npm info using npm@6.9.0
npm info using node@v11.10.1
npm info lifecycle rosbag2@0.1.0~prestart: rosbag2@0.1.0
npm info lifecycle rosbag2@0.1.0~start: rosbag2@0.1.0
> rosbag2@0.1.0 start /Users/andreasklintberg/personal/xviz/examples/converters/rosbag2
> node ./src/index.js "./src/index.js"
internal/modules/cjs/loader.js:779
return process.dlopen(module, path.toNamespacedPath(filename));
^
Error: dlopen(/Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node, 1): Library not loaded: @rpath/librosidl_typesupport_cpp.dylib
Referenced from: /Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node
Reason: image not found
在纱线中也是如此
yarn start
yarn run v1.13.0
warning package.json: No license field
$ node ./src/index.js ./src/index.js -d ../../../data/rosbag2/rosbag2_2019_03_09-21_54_44 -o ../../xviz-data/rosbag2/rosbag2_2019_03_09-21_54_44/
internal/modules/cjs/loader.js:779
return process.dlopen(module, path.toNamespacedPath(filename));
^
Error: dlopen(/Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node, 1): Library not loaded: @rpath/librosidl_typesupport_cpp.dylib
Referenced from: /Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node
Reason: image not found
我知道这个错误是因为动态链接/@rpath 搞砸了,我想这是因为 npm/yarn 与环境变量或其他东西混淆,但运行 yarn env 似乎一切都是正确的。
所以我想我想知道是否有人知道在本机节点中运行它并使用npm/yarnscript 包装开始有什么区别?为什么这种差异会破坏@rpath/dynamic 链接?
编辑:
我的index.js文件很简单,只导入构建好的node-gyp包:
let RosbagDeserializer = require('../build/Release/rosbags2_nodejs.node');
const deserializer = new RosbagDeserializer.Rosbag2Wrapper();
【问题讨论】:
-
您可以尝试删除 node_modules 文件夹并运行
npm update。我认为这个问题可能是由于从某个版本的节点构建的,您可能需要从源代码重建某些包。 -
不幸的是:/
-
你使用的是哪个节点版本?
-
@AndreasKlintberg 动态链接可能会受到环境变量的影响 - 我相信您可能正在观察这种影响。
npm start将启动应用程序并进行一些环境清理(例如LD_LIBRARY_PATH)。尝试将scripts.start设置为:node -e 'console.log(process.env)并查看从命令行运行它的区别。 -
你可以通过这个帖子,我对 Mac 不太熟悉,但我想这会有所帮助。 stackoverflow.com/questions/17703510/…
标签: node.js npm yarnpkg node-gyp