简单的问题。我正在将之前由其他人编写的代码导入到eclipse中。我收到错误: “对ceilf'的未定义引用”
当我使用celif时在我看来,celif被认为包含在我的ile中包含的math.h库中。但是,当我打开/usr/include/math.h文件时,我没有看到定义的ceilf方法。事实上,据我所知,我的redhat部署中的math.h文件都没有ceilf方法。知道任性的ceilf方法定义在哪里?由于此代码可以在其他地方运行甚至编译,因此问题必须与我的配置相关,而不是代码本身。
PS。我可以使用常规ceil方法。我已经考虑过改用它,但是在程序的关键路径中效率会降低。是的,我知道过早的优化是邪恶的,但我要求尽可能多的好奇,为什么我会有错误。我不明白为什么我的math.h文件不会玷污它。
EDIT :: 谢谢你解释为什么我找不到ceilf函数,我明白这个问题。但是,我不知道如何安抚日食。我已经尝试将编译器选项设置为按建议使用std = c99,但它不会删除错误。事实上我认为eclipse只是使用我的Makefile来进行构建,而make文件不会抛出异常。我能做些什么来让编辑器意识到我已经定义了文件?
答案 0 :(得分:6)
ceilf
是数学库的一部分,因此您需要与-lm
链接才能使用它。仅仅#include <math.h>
还不够。
答案 1 :(得分: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
或适当的开关链接以链接数学库。