waf找不到现有的库

waf cannot find an existing library

本文关键字:找不到 waf      更新时间:2023-10-16

我正在尝试为node.js编程一个C++模块。节点正在使用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、libboostrongystem等,可以在configure上找到。

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

谢谢你的帮助。

我自己解决了它。使用-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')