waf не может найти существующую библиотеку - PullRequest
3 голосов
/ 05 февраля 2012

Я пытаюсь запрограммировать модуль C ++ для node.js.Узел использует 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

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

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

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

1 Ответ

5 голосов
/ 05 февраля 2012

Решил сам. Очень полезно запустить 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')
...