C++ 使用floorf()函数时无法链接Embarcadero 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

我需要使用Math.h中定义的floorf()函数,虽然我可以编译在XE4项目中成功使用该函数的模块,但在链接时收到此错误:

[ilink32错误]错误:从.OBJ引用的未解析外部'\u floorf'
[ilink32错误]错误:无法执行链接

这毫无意义-当我控制floorf()函数时,编译器在打开Math.h时显然知道函数声明的位置。我已将#include包含在.cpp文件中。我需要什么才能让它工作?我真的需要使用这个标准的数学函数。

在某些编译器中,默认情况下不启用与数学库的链接


我使用BDS2006,因此这可能没有帮助,但:

  • 尝试使用
    floor()
    而不是
    floorf()
    • 如果你有矛盾问题,使用
      float(float(float(x))
  • 试着包括,而不是或相反的方式,看看它是否有帮助
  • 您使用任何名称空间吗?(尝试使用
    ::floor()
  • 难道你没有忘记一些
    {
    }
    }?尤其是在
    结构
    /
    /
    命名空间
  • 您是否使用
    #定义
    s?
    
    • borland/embarcadero有时会遇到定义内部代码的问题
    • 它很少错误地编译代码,因此代码在编写时无法正常工作
    • 您是否看到过这几次通常交换/插入一些行(甚至是空的)的帮助
  • 您在哪里使用floorf功能(cpp文件、单位或表格)?
    • 如果您将单位文件添加到项目中(使用您自己的内容,而不是窗口/表单代码)
    • 然后假设它是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