3

我正在尝试为 node.js 编写一个 C++ 模块。Node 使用 waf 作为构建器。

如果库“sigar”存在,我想检查配置。我正在尝试这样做:

def configure(conf):
    conf.check_cxx(lib='sigar')

当我运行“node-waf configure”时,我收到以下消息:

Checking for library sigar               : not found 

但是 libsigar.so 存在:

# whereis libsigar
libsigar: /lib64/libsigar.so

安装“libsigar”库后,我还运行了 ldconfig。节点模块编译、链接和工作没有错误。其他库如 libm、libboost_system 等可以在 configure 上找到。

有人可以告诉我我做错了什么吗?除了将 *.so 复制到库路径并运行 ldconfig 之外,安装库还有什么特别的事情要做吗?

谢谢你的帮助。

4

1 回答 1

5

我自己解决了。对于非常详细的输出,使用 -vvv 选项运行配置非常有帮助。

20:31:48 runner system command -> ['/usr/bin/g++', 'Release/test_1.o', '-o', '/home/reeaal/workspace/hwmonitor/build/.conf_check_0/testbuild/Release/testprog', '-Wl,-Bdynamic', '-lsigar']

当我试图重新编译程序时,我得到了一个真正有帮助的链接器错误:

g++ test.cpp -Bdynamic -lsigar
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/libsigar.so: undefined reference to `dlsym'
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/libsigar.so: undefined reference to `dlopen'
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/libsigar.so: undefined reference to `dlclose'
collect2: ld returned 1 exit status

在检查 libsigar 之前添加一个链接器标志解决了这个问题:

conf.env.append_value('LINKFLAGS', '-ldl')
于 2012-02-05T19:46:31.560 回答