2014-12-03 153 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'` 

在隨後的if語句中,第二個變量因此未定義。

我懷疑這是因爲測試程序沒有與標準的數學庫鏈接。但是在我的主程序中,libm.so將被鏈接。

如何解決cmake測試程序的鏈接問題?

我會很高興有任何意見 謝謝

阿恩

+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 2014-12-03 14:24:11

回答

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

謝謝你,這是非常有用的,並解決了問題 – 2014-12-03 14:23:28

+0

@AgnesSorr如果是這樣的話,你應該標記答案接受(通過點擊綠色的勾號)。可能不可能立即發佈問題(我相信15分鐘)後發生暫停。而且,爲了記錄,在詢問SO之前閱讀文檔通常是個好主意;-) – Angew 2014-12-03 14:25:56