当我们用 gcc 编译一个 c 文件时,如果用到了 math.h 中的一些数学函数,例如:ceil(),floor() 等,可能会出现如下错误:
undefined reference to ‘ceil’
collect2:ld returned 1 exit status
主要是因为使用 math.h 中声明的库函数时,gcc 命令行必须加 - lm 选项,如果没有加就会出现上面的错误,原因在于数学函数位于 libm.so 库文件中,-lm 选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。我们平时用到的大部分函数(例如 printf)位于 libc.so 库文件中,使用 libc.so 中的库函数在编译时不需要加 - lc 选项,是因为这个选项是 gcc 默认的选项。所以在使用 gcc 命令去执行 c 文件时,如果使用了 math.h 中的库函数的时候,一定要加 - lm 选项。《摘自Linux c 编程一站式学习》
1 如果是gcc命令行编译,记得添加 -lm选项,例如:
gcc main.c -lm -o main
2 如果是CMakeLists.txt中,需要在target_link_libraries中添加:
// target_link_libraries(test1 ${ZLOG_LIB} ${FLATBUFFER_LIB} -lrt -lm)
target_link_libraries(test1 ${ZLOG_LIB} ${FLATBUFFER_LIB} rt m)