gpt4 book ai didi

c++ - _HUGE 和 __IMP__HUGE 在 "math.h"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:40 25 4
gpt4 key购买 nike

我有一个关于如何链接 math.h 中定义的常量的问题。

在 visual studio 2010 中,我正在构建一个带有“MD”的 64 位 dll c++ 库,该库使用使用“HUGE_VAL”的第三方库。从标题“math.h”看来,“HUGE_VAL”似乎被定义为“_HUGE”。当我尝试构建时,出现链接错误

错误 LNK2001:无法解析的外部符号 _HUGE

谷歌搜索后,我认为 _HUGE 应该在 msvcrt.lib 中定义。 MSVCRT.lib 已链接,但我没有链接 libcmt.lib,因为它会导致重新定义错误。

令我感到奇怪的是,当我创建一个使用 HUGE_VAL 并使用/verbose 作为链接器选项的简单控制台程序时,它显示 _IMP_HUGE 被链接。

我真正好奇的是 _HUGE 在什么阶段变成 _IMP_HUGE?另外,有没有其他人遇到 Unresolved _HUGE 错误,有没有人知道如何修复它?

感谢您阅读这个冗长的问题并提出任何想法。

最佳答案

我在使用 VC11.0 时遇到过这个问题。我得到的唯一错误是未解析的符号 _HUGE 错误。

我正在链接动态多线程运行时库,我发现如果我在链接步骤中包含“libcmt.lib”,问题就会得到解决(或解决)。

我开始研究如何在 SDK 中定义 header 以寻找线索,发现我在编译步骤中缺少编译器预目录:_DLL。

当您使用动态运行时库构建时,_HUGE 变量需要是 __declspec(dllimport) 以便可以找到它。当您包含“math.h”->“crtdefs.h”而没有将 _DLL 设置为前置指令时,该变量将不会被 __declspec(dllimport) 编辑,并且会在链接时显示为丢失。

我遇到这个问题是因为我正在使用我自己的自定义 makefile 进行编译并且我忽略了添加 _DLL 前置指令。在我的编译步骤中添加 -D_DLL 解决了编译问题,无需进行其他更改。

我知道这个帖子很旧,但我想我会把它扔在那里,因为它可能会帮助遇到类似问题的人。

关于c++ - _HUGE 和 __IMP__HUGE 在 "math.h",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8042607/

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