"math.h"中的_HUGE和__IMP__HUGE

use*_*503 5 c++ 64-bit constants static-linking visual-studio

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

在visual studio 2010中,我正在构建一个带有"MD"的64位dll c ++库,它使用第三方库来使用"HUGE_VAL".从标题"math.h"开始,似乎"HUGE_VAL"被定义为"_HUGE".当我尝试构建时,会产生链接错误

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

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

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

我真正好奇的是_HUGE在什么阶段变成_ IMP _HUGE?此外,有没有其他人得到未解决的_HUGE错误,有没有人有任何想法如何解决?

感谢阅读长期问题和任何想法.

Chr*_*ris 2

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

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

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

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

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

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