C++ 使用floorf()函数时无法链接Embarcadero XE4项目
我需要使用Math.h中定义的floorf()函数,虽然我可以编译在XE4项目中成功使用该函数的模块,但在链接时收到此错误:C++ 使用floorf()函数时无法链接Embarcadero XE4项目,c++,c,math,linker-errors,c++builder-xe4,C++,C,Math,Linker Errors,C++builder Xe4,我需要使用Math.h中定义的floorf()函数,虽然我可以编译在XE4项目中成功使用该函数的模块,但在链接时收到此错误: [ilink32错误]错误:从.OBJ引用的未解析外部'\u floorf' [ilink32错误]错误:无法执行链接 这毫无意义-当我控制floorf()函数时,编译器在打开Math.h时显然知道函数声明的位置。我已将#include包含在.cpp文件中。我需要什么才能让它工作?我真的需要使用这个标准的数学函数。在某些编译器中,默认情况下不启用与数学库的链接 我使用B
[ilink32错误]错误:从.OBJ引用的未解析外部'\u floorf'
[ilink32错误]错误:无法执行链接
这毫无意义-当我控制floorf()函数时,编译器在打开Math.h时显然知道函数声明的位置。我已将#include包含在.cpp文件中。我需要什么才能让它工作?我真的需要使用这个标准的数学函数。在某些编译器中,默认情况下不启用与数学库的链接
我使用BDS2006,因此这可能没有帮助,但:
floor()
而不是floorf()
- 如果你有矛盾问题,使用
float(float(float(x))代码>
::floor()
)代码>,{
,}
,}代码>?尤其是在结构
/类
/命名空间
#定义s?
- borland/embarcadero有时会遇到定义内部代码的问题
- 它很少错误地编译代码,因此代码在编写时无法正常工作
- 您是否看到过这几次通常交换/插入一些行(甚至是空的)的帮助
- 如果您将单位文件添加到项目中(使用您自己的内容,而不是窗口/表单代码)
- 然后假设它是VCL/机器生成的东西,比如表单,而不是标准的C/C++文件
- 而且它的编译/链接方式也不同
- 如果是这种情况,请从项目中删除该文件
- 并将其包含添加到需要的一个表单cpp/h文件中
- 我在BCB5,BCB6,BDS2006中看到了这种行为
#define
s?
- 某些定义可以在内部用于启用//禁用math内部的部分代码
- 因此,如果你在数学包含之前定义相同的内容,你可能会弄糟它
- 不要使用诸如
,\u math
之类的代币\u floor
- 如果它们与VCL名称冲突,那么奇怪的事情就会开始发生
- 典型的是自己的
函数与内部Draw()
TForm::Draw
- 没有报告错误,但有时代码不起作用(即使调用操作数不同)
- 上次在BCB6上看到这个
- 只要将它们重命名为
,就可以了,除非您绑定到某种命名方案draw()
我的观点是,在我的教学时间理解中,6点多次看到了,但是我从未听过C++的BuildRe+Cuilder(任何版本)的这种行为。如果我需要使用某个设置来启用此功能,我不知道它是什么。@Isaac borland/embarcadero编译器在包含math.h/math.hpp时向math添加链接不需要任何开关。它通常是通过头文件中的
#pragma链接“blabla.obj”
行完成的…添加头文件只会让编译器知道函数的原型;它不会告诉链接器在哪里找到它。您还需要包含数学库。是否包含包含“floorf”函数的库(而不是头文件)。顺便说一句:函数名是'floorf'而不是'u floorf',我不知道要包含的库的名称是什么。我试过math.lib和libm.lib,这两个显然都不存在。当lib文件与头文件不同且从未在任何地方记录时,我怎么能神奇地知道lib文件的名称呢?
[ilink32 Error] Error: Unresolved external '_floorf' referenced from <myfilename>.OBJ
[ilink32 Error] Error: Unable to perform link