gpt4 book ai didi

c++ - 与 "math.h"的链接错误 - 告诉链接器与其链接的选项是什么?

转载 作者:行者123 更新时间:2023-11-30 05:18:28 25 4
gpt4 key购买 nike

我想在 C++ Builder 10.1.2 中使用 math.h

不幸的是,当我尝试调用 math.h 的函数之一时出现链接器错误。我已经知道的是,(出于历史原因)链接器必须明确设置为链接才能使用 ma​​th 库。 See here .

gcc 中,这可以通过 -lm 标志来完成。

但是我必须在 项目选项 => C++ 链接器 => 高级选项 字段中为 C++ Builder 输入什么才能进行此操作工作?

编辑:

举个例子:创建一个新的 VCL 项目并像这样更改 Form1 代码:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

#include <math.h>
//-------------------------------------------------------------------------- -
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
float a = floorf(0.0f);
}
//---------------------------------------------------------------------------

这会给你链接器错误

[ilink32 Error] Error: Unresolved external '_floorf' referenced by C:\USERS\FLKO\DOCUMENTS\EMBARCADERO\STUDIO\PROJECTS\WIN32\DEBUG\UNIT1.OBJ

所以我需要告诉链接器链接到 math 库。

但是如何呢?

最佳答案

此问题与静态/动态链接无关,但与名称修改有关。如果仔细检查 math.h,您会发现 floor 函数的 Win64 和 Win32 声明之间的区别:

extern "C++" {
...
#if defined(_WIN64)
inline float floor(float __x) { return floorf(__x); }
...
#else
...
inline float floor(float __x) { return (float)floor((double)__x); }
...

长话短说,尝试在 Win64 平台上构建项目:floorf 将被正确链接。它不适用于 Win32。我的建议是使用 floor 而不是 floorf。它将在两个平台上工作。

编辑:实际上,Embarcadero std 库中没有为 Win32 定义 floorf 函数。如果您想使用某些第 3 方标准库,则必须静态包含适当的 header (不是来自 Embarcadero 的 header )和链接库(#pragma link)。如果库是用 gcc/msvc 编译的,则必须将库转换为 omf 格式。

关于c++ - 与 "math.h"的链接错误 - 告诉链接器与其链接的选项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com