From: Wheeler, F. (Research) <wh...@cr...> - 2002-06-27 20:06:42
|
Peter, My msvc++ build is not finding _sqrtf. It looks to me like sqrtf is available with MSVC++ (C++), but not MSVC (C). My test code is below, with comments telling which commands worked and which did not. MSVC++ math.h declares sqrtf only when __cplusplus is set. I have not been able to get a decent explanation from MSDN on this sqrtf issue. MSDN does not clearly distinguish between C and C++. According to MSDN, MSVC++ decides whether to link in standard C++ libraries, or to just link in standard C libraries based on what header files a program includes. So, from MSDN I can't tell what it is doing with mixed C/C++ to figure out whether a C program could use sqrtf from the C++ lib. I think VXL_MATH_HAS_SQRTF should not be set under MSVC. Do you agree? Fred Wheeler -- hello.cxx ---------------------------------------------- /* g++ -c hello.cxx -o hello.o # works fine g++ hello.o -o hello # works fine ./hello # works fine cl /nologo /GX hello.cxx /Fohello.obj # works fine cl /nologo /GX hello.obj /Fehello.exe # works fine ./hello # works fine rm -f hello.exe hello.o hello.obj */ #include <iostream> #include <cmath> int main () { std::cout << "Hello" << std::endl; std::cout << "sqrtf(2) = " << sqrtf(2.0) << std::endl; return 0; } -- hello.c --------------------------------------------------------- /* gcc -c hello.c -o hello.o # works fine gcc hello.o -o hello # works fine ./hello # works fine cl /nologo /W3 /Zm1000 /MD /O2 -c hello.c /Fohello.obj # warning C4013: 'sqrtf' undefined cl /nologo /GX hello.obj /Fehello.exe # error LNK2001: unresolved external symbol _sqrtf ./hello # not created rm -f hello.exe hello.o hello.obj */ #include <stdio.h> #include <math.h> int main () { printf("Hello\n"); printf("sqrtf(2) = %g\n", sqrtf(2.0)); return 0; } ------------------------------------------------------------------- -- Fred Wheeler, GE CRD, KWC-303 Phone: 518-387-7225 (GE Internal Dialcom: 8*833-7225) Fax: 518-387-4042 (GE Internal Dialcom: 8*833-4042) |
From: Peter V. <Pet...@es...> - 2002-06-30 18:28:02
|
> It looks to me like sqrtf is available with MSVC++ (C++), but not MSVC (C). > MSVC++ math.h declares sqrtf only when __cplusplus is set. > I think VXL_MATH_HAS_SQRTF should not be set under MSVC. Do you agree? Sure, that's the idea of the configure script (which we don't use with MSVC): Check whether a feature is functioning or not by trying it out, then set the corresponding macro. Actually, then, the configure script should run the C compiler, not the C++ compiler, but since this seems to be an unnecessary distinction on non-MSVC, it could be kept as is. Peter. |