我正在使用cmake来构建我的c ++项目,该项目使用位于我的“/ usr / local / bin /”目录中的库。 CMakeList.txt中的相关部分为:
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 :(得分: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)