waf не может найти существующую библиотеку


Я пытаюсь запрограммировать модуль C++ для node.JS. Узел использует waf в качестве конструктора.

Я хочу проверить на configure, существует ли библиотека "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

Я также запустил ldconfig после установки библиотеки "libsigar". Модуль узла компилирует, связывает и работает без ошибок. Другие библиотеки, такие как libm, libboost_system и так далее можно найти на configure.

Может ли кто-нибудь сказать мне, что я делаю не так? Есть ли что-то особенное для установки библиотеки, кроме копирования *.so в путь к библиотеке и запуска ldconfig?

Спасибо за любую помощь.

1   2   2012-02-05 21:28:00

1 ответ:

Решил ее сам. Его довольно полезно запустить configure с опцией-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')