Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;对“ceilf'”的未定义引用&引用;_C_Eclipse - Fatal编程技术网

&引用;对“ceilf'”的未定义引用&引用;

&引用;对“ceilf'”的未定义引用&引用;,c,eclipse,C,Eclipse,简单的问题。我正在将以前由其他人编写的代码导入eclipse。我得到一个错误: "undefined reference to `ceilf'" 当我使用ceilf时。在我看来,ceilf应该包含在我的文件中包含的math.h库中。但是,当我打开/usr/include/math.h文件时,我没有看到定义了ceilf方法。事实上,据我所知,我的redhat部署中没有一个math.h文件有ceilf方法。知道任性ceilf方法的定义在哪里吗?因为这段代码可以工作,甚至可以在其他地方编译,所以问题

简单的问题。我正在将以前由其他人编写的代码导入eclipse。我得到一个错误:

"undefined reference to `ceilf'"
当我使用
ceilf
时。在我看来,
ceilf
应该包含在我的文件中包含的math.h库中。但是,当我打开/usr/include/math.h文件时,我没有看到定义了ceilf方法。事实上,据我所知,我的redhat部署中没有一个math.h文件有
ceilf
方法。知道任性
ceilf
方法的定义在哪里吗?因为这段代码可以工作,甚至可以在其他地方编译,所以问题在于我的配置,而不是代码本身

另外,我可以使用常规的
ceil
方法。我曾考虑过换成它,但在项目的关键路径上,它的效率会更低。是的,我知道过早的优化是有害的,但出于好奇,我问自己为什么会有这样的错误。我不明白为什么我的
math.h
文件不会弄脏它

编辑::
感谢您解释为什么我找不到
ceilf
函数,我理解这个问题。然而,我不知道如何安抚日食。我已尝试按照建议将编译器选项设置为使用std=c99,但它不会删除错误。事实上,我认为eclipse只是使用我的Makefile进行构建,而make文件不会抛出异常。我能做些什么使编辑器意识到我已经定义了文件?

根据手册页面:

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       ceilf(), ceill():
           _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600 ||
           _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;
           or cc -std=c99
尝试在编译器中将标准设置为C99或启用这些功能测试宏之一


另外,请确保您正在使用
-lm
或平台和编译器的相应开关链接数学库。

ceilf
是数学库的一部分,因此您需要使用
-lm
链接才能使用它。仅仅包含是不够的。

ceilf
符合C99。如果您是根据较旧的标准编译,则该函数将不存在。尝试使用-
std=c99
进行编译。这可以解决编译器错误的问题,但“未定义引用”是在某些系统上不使用
libm
进行链接时发生的链接器错误。我已经尝试过,但不起作用。而且,eclipse只运行make来编译所有内容;这是让我困惑的一部分。如果我自己在命令行中创建这个程序,它可以正常运行并编译,但是如果eclipse进行编译(据我所知,这只是意味着调用同一个make文件),我会得到一个异常?eclipse不一定使用build目录中的Makefile。检查当前项目的构建配置(在Eclipse中)。我已经检查过了,math.h文件似乎没有CEIF的定义,尽管它被认为是math.h的一部分。这就是问题的开始