如何指定node.js npm的include和libpath
我想用npm install来安装一个node.js模块(在这种情况下是zmq)。 该模块所需的C库不安装在标准位置。 如何为npm指定额外的包含path和libpath? 我已经尝试了诸如“CFLAGS =” – I / path / to / include“npm install”,没有任何效果。
可以如下构buildzeromq模块 (其他模块可能工作相同):
- 下载zip文件并解压缩到临时位置,例如
/tmp/zeromq.node-master
- 编辑
binding.gyp
文件 - find与您的操作系统相对应的部分,并在其中添加include
-I
和library-L
path。
例如
['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:
npm install /tmp/zeromq.node-master
另一个解决scheme(不需要任何文件更改)是使用pkg-config的PKG_CONFIG_PATH
variables,它应该指向安装库的位置。 如果zmq已安装在/opt/zmq
那么PKG_CONFIG_PATH=/opt/zmq/lib/pkgconfig pkg-config libzmq --libs
应该返回-L/opt/zmq/lib -lzmq
并且可以使用PKG_CONFIG_PATH=/opt/zmq/lib/pkgconfig npm install
在节点应用程序启动之前,必须相应地设置LD_LIBRARY_PATH
,即: LD_LIBRARY_PATH=/opt/zmq/lib node app.js