我试图用npm install安装node.js模块(在这种情况下是zmq)。此模块所需的C库没有安装在标准位置。我如何指定额外的包含路径和lib路径到npm?我试过像"CFLAGS="-I/path/to/include" npm install"这样的东西,但没有效果。
zeromq模块可以按如下方式构建(其他模块可能工作相同):
- 下载zip文件并解压缩到临时位置,例如
/tmp/zeromq.node-master
编辑 - 找到与您的操作系统对应的部分,并在那里添加包含
-I
和库-L
路径。
binding.gyp
文件。
['OS=="linux"', {
'cflags': [
'<!(pkg-config libzmq --cflags 2>/dev/null || echo "")',
'-I/usr/local/zeromq3/include'
],
'libraries': [
'<!(pkg-config libzmq --libs 2>/dev/null || echo "")',
'-L/usr/local/zeromq3/lib'
],
}],
- 在临时目录:
npm install /tmp/zeromq.node-master
上运行npm install另一个解决方案(不需要任何文件更改)是使用pkg-config的PKG_CONFIG_PATH
变量,该变量应该指向库的安装位置。如果zmq已经安装在/opt/zmq
,那么PKG_CONFIG_PATH=/opt/zmq/lib/pkgconfig pkg-config libzmq --libs
应该返回-L/opt/zmq/lib -lzmq
, npm install
可以运行PKG_CONFIG_PATH=/opt/zmq/lib/pkgconfig npm install
在node app启动前,LD_LIBRARY_PATH
必须相应设置,即:LD_LIBRARY_PATH=/opt/zmq/lib node app.js