我目前正在使用GCC编译,我需要使用<math.h>
。
问题是它无法识别该库。
我也尝试过-lm
没事了。
我尝试使用的功能是ceil()
我收到以下错误:
: undefined reference to `ceil'
collect2: ld returned 1 exit status
我正在使用最新的 Ubuntu 和math.h有没有。
我尝试使用-lm https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html#index-l在另一台计算机上,它运行得很好。
我怎么解决这个问题?
我确实包括了<math.h>
。另外,我使用的命令是:
gcc -lm -o fb file.c
获取此代码并将其放入文件中ceil.c
:
#include <math.h>
#include <stdio.h>
int main(void)
{
printf("%f\n", ceil(1.2));
return 0;
}
编译它:
$ gcc -o ceil ceil.c
$ gcc -o ceil ceil.c -lm
这两个之一应该可以工作。如果两者都不起作用,请显示每个编译的完整错误消息。注意-lm
出现在源文件(或目标文件,如果在链接之前将源编译为对象)的名称之后。
Notes:
现代编译器可能会优化代码以直接将 2.0 传递给printf()
不打电话ceil()
在运行时,所以根本不需要数学库。
经验法则:在命令行上在库之前列出目标文件和源文件。这个答案表明在使用中:-lm
位于源文件之后ceil.c
。如果您正在构建make
等等,那么你通常使用ceil.o
在命令行上(以及其他目标文件);通常,您应该在任何库之前列出所有目标文件。
经验法则偶尔会出现例外情况,但这种情况很少见,并且会针对预期/需要例外的特定情况进行记录。如果没有相反的明确文档,请应用经验法则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)