2012-02-05 25 views
2

我正在尝试为node.js编写C++模块。 节点正在使用waf作为构建器。waf找不到现有的库

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

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

当我运行 “节点-WAF进行配置”,我得到了以下信息:

Checking for library sigar    : not found 

但libsigar.so存在:

# whereis libsigar 
libsigar: /lib64/libsigar.so 

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

有人能告诉我我做错了什么吗? 安装一个库有没有什么特别的事情要做,而不是只将* .so拷贝到库路径并运行ldconfig?

感谢您的任何帮助。

回答

3

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

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'] 

当我试图重新编译PROGRAMM,我得到一个链接错误,真的帮了:

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') 
+0

真尽管waf吐出的错误信息可能更加明确。 – user1284631 2012-12-18 09:22:30