2014-12-03 9 views
1

Я использую cmake для создания моего проекта C++, который использует библиотеку, расположенную в моем каталоге «/ usr/local/bin /». Соответствующая часть в CMakeList.txt гласит:Библиотека CHECK_LIBRARY_EXISTS с зависимостями

CHECK_INCLUDE_FILES("/usr/local/include/fann.h" HAVE_FANN_HEADER) 
CHECK_LIBRARY_EXISTS(fann fann_get_errno "/usr/local/lib/" HAVE_FANN_LIB) 
if(${HAVE_FANN_HEADER} AND ${HAVE_FANN_LIB}) 

заголовок найден без проблем библиотека пока нет. Глядя в CMakeError.txt показывает:

`/usr/bin/cc -DCHECK_FUNCTION_EXISTS=fann_get_errno CMakeFiles/cmTryCompileExec2973046031.dir/CheckFunctionExists.c.o -o cmTryCompileExec2973046031 -L/usr/local/lib -rdynamic -lfann -Wl,-rpath,/usr/local/lib 
/usr/local/lib/libfann.so: undefined reference to 'sin' 
/usr/local/lib/libfann.so: undefined reference to 'exp' 
/usr/local/lib/libfann.so: undefined reference to 'cos' 
/usr/local/lib/libfann.so: undefined reference to 'log' 
/usr/local/lib/libfann.so: undefined reference to 'pow' 
/usr/local/lib/libfann.so: undefined reference to 'sqrt' 
/usr/local/lib/libfann.so: undefined reference to 'floor'` 

в последующем, если-заявлении второй переменной, поэтому не определено.

Я подозреваю, что это связано с тем, что тестовая программа не связана со стандартной математической библиотекой. Однако в моей основной программе libm.so будет связан.

Как исправить связь программы тестирования cmake?

Я был бы рад любым комментарии Спасибо

Arne

+0

Лично я с этим справиться с помощью пользовательского find_package вызова (http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries), который также будет убедиться, что все зависимости от Фэнн найдены , Пример этого можно найти на странице https://github.com/jrdi/fann-box/blob/master/cmake/FindFANN.cmake (нет аффилиации, не пишите и не пытайтесь), а ссылки против математики в Linux enviroment – IdeaHat

ответ

0

Согласно documentation of CHECK_LIBRARY_EXISTS(), вы можете установить CMAKE_REQUIRED_LIBRARIES в список библиотек, необходимых для связывания теста перед вызовом CHECK_LIBRARY_EXISTS(). Как так:

set(CMAKE_REQUIRED_LIBRARIES m) 
CHECK_LIBRARY_EXISTS(fann fann_get_errno "/usr/local/lib/" HAVE_FANN_LIB) 
+0

Спасибо, это было очень полезно и исправлено проблема –

+0

@AgnesSorr. Если это так, вы должны отметить ответ как принятый (щелкнув зеленую отметку). Это может быть невозможно сразу, есть тайм-аут после размещения вопроса (я считаю, 15 мин). И, для записи, обычно рекомендуется читать документы, прежде чем спрашивать о SO ;-) – Angew

Смежные вопросы