_HUGE and __IMP__HUGE in “math.h“

2023-07-08 10:37:43 浏览数 (2)

代码语言:javascript复制
I have a question about how constants defined in math.h are linked.

In visual studio 2010, I'm building a 64-bit dll c   library with "MD" that uses a third party library that make use of "HUGE_VAL". From the header "math.h", it seems that "HUGE_VAL" is defined as "_HUGE". When I try to build, a linking error results

error LNK2001: unresolved external symbol _HUGE

After doing some googling, I think _HUGE should be defined in msvcrt.lib. MSVCRT.lib is linked, but I didn't link libcmt.lib because it would cause re-definition errors.

What strikes me as odd is that when I create a simple console program that uses HUGE_VAL and use /verbose as a linker option, it shows _IMP_HUGE being linked.

What I'm really curious of is at what stage does _HUGE turn into _IMP_HUGE? Also, have anyone else gotten the unresolved _HUGE error and does anyone have any ideas for how it could be fixed?

Thanks for reading the long question and for any ideas.

代码语言:javascript复制
I have experienced this issue with VC11.0. The only error I get is an unresolved symbol _HUGE error.

I am linking with dynamic multi-threaded run time libraries and I found that if I were to include "libcmt.lib" in my link step, then the issue is resolved (or worked around).

I started looking into how the headers were defined in the SDK for clues and found that I was missing a compiler pre-directory in my compile steps: _DLL.

When you build with dynamic run time libraries the _HUGE variable needs to be __declspec(dllimport) so it can be found. When you include "math.h" -> "crtdefs.h" without setting _DLL as a pre-directive, the variable will not be __declspec(dllimport)'ed and will appear missing at link time.

I was getting this issue because I am compiling with my own custom makefiles and I had neglected to add the _DLL pre-directive. Adding -D_DLL to my compilation step resolved the compile issue with no other changes needed.

I know this thread is old, but figured I would throw it out there as it may help someone with a similar issue.

Share
Improve this answer
Follow
answered Aug 22 '13 at 0:41
代码语言:javascript复制
LIBCD.lib
LIBC.lib
LIBCMT.lib

0 人点赞