如何指定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 -Lpath。

例如

 ['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_PATHvariables,它应该指向安装库的位置。 如果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