关于math.h中定义的常量是如何链接的,我有一个问题。
在visual 2010中,我正在用"MD“构建一个64位的dll c++库,它使用使用"HUGE_VAL”的第三方库。从标题"math.h“来看,"HUGE_VAL”似乎被定义为"_HUGE“。当我尝试构建时,链接错误将导致
错误LNK2001:未解析的外部符号_HUGE
在做了一些googling之后,我认为_HUGE应该在msvcrt.lib中定义。MSVCRT.lib是链接的,但是我没有链接libcmt.lib,因为它会导致重新定义错误。
让我感到奇怪的是,当我创建一个使用HUGE_VAL并使用/verbose作为链接器选项的简单控制台程序时,它会显示_IMP_HUGE正在被链接。
我真正好奇的是,_HUGE在什么阶段变成了_IMP_HUGE?另外,是否还有其他人得到了未解决的_HUGE错误,是否有人对如何修复该错误有任何想法?
谢谢你阅读了这个冗长的问题和任何想法。
发布于 2013-08-22 00:41:31
我在VC11.0中经历过这个问题。我得到的唯一错误是一个未解决的符号_HUGE错误。
我正在与动态多线程运行时库链接,我发现如果我在链接步骤中包括"libcmt.lib“,那么这个问题就解决了(或者解决了)。
我开始研究如何在SDK中定义头,寻找线索,并发现在编译步骤:_DLL中缺少了一个编译器预目录。
当您使用动态运行时库构建时,_HUGE变量需要是__declspec(dllimport),这样就可以找到它。当您包含"math.h“-> "crtdefs.h”而不将_DLL设置为预指令时,变量将不会是__declspec(dllimport)'ed,并且在链接时会出现缺失。
我之所以会遇到这个问题,是因为我正在用我自己的定制makefile进行编译,而且我忽略了添加_DLL预指令。将-D_DLL添加到我的编译步骤解决了编译问题,无需进行其他更改。
我知道这条线很旧,但我想我会把它扔出去,因为它可能会帮助有类似问题的人。
https://stackoverflow.com/questions/8042607
复制相似问题