Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

_HUGE and __IMP__HUGE in "math.h"

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.

like image 678
user1034503 Avatar asked Nov 04 '22 11:11

user1034503


1 Answers

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.

like image 133
Chris Avatar answered Nov 12 '22 16:11

Chris