我正在尝试为node.js编写C ++模块。 Node正在使用waf作为构建器。
如果库“sigar”存在,我想检查configure。 我正在尝试这样做:
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?
感谢您的帮助。
答案 0 :(得分:4)
我自己解决了。 对于非常详细的输出,使用-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']
当我尝试重新编译程序时,我收到了链接器错误,这确实有帮助:
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')