3

简单的问题。我正在将其他人以前编写的代码导入到 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 文件不会抛出异常。我可以做些什么来让编辑器意识到我已经定义了文件?

4

2 回答 2

9

ceilf是数学库的一部分,因此您需要链接-lm才能使用它。只是#include <math.h>还不够。

于 2012-06-07T16:14:49.433 回答
2

根据手册页:

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或为您的平台和编译器链接数学库的适当开关。

于 2012-06-07T15:39:35.473 回答