WAF找不到现有的图书馆

ree*_*aal 3 c++ module shared-libraries waf node.js

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

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

def configure(conf):
    conf.check_cxx(lib='sigar')
Run Code Online (Sandbox Code Playgroud)

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

Checking for library sigar               : not found 
Run Code Online (Sandbox Code Playgroud)

但是libsigar.so存在:

# whereis libsigar
libsigar: /lib64/libsigar.so
Run Code Online (Sandbox Code Playgroud)

安装“ libsigar”库后,我还运行了ldconfig。节点模块可以编译,链接并正常工作。其他库,例如libm,libboost_system等,可以在configure上找到。

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

谢谢你的帮助。

ree*_*aal 5

我自己解决了。使用-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']
Run Code Online (Sandbox Code Playgroud)

当我尝试重新编译程序时,出现了一个链接器错误,该错误确实有所帮助:

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
Run Code Online (Sandbox Code Playgroud)

在检查libsigar之前添加链接器标志可解决此问题:

conf.env.append_value('LINKFLAGS', '-ldl')
Run Code Online (Sandbox Code Playgroud)