From: Chris S. <ir0...@gm...> - 2006-06-29 11:04:14
|
I've noticed something a little odd with g++. I've got a makefile for a custom dll with the following: CFLAGS = -Wall -pedantic -DEMERGESCHEMEENGINE_EXPORTS -mno-cygwin -frtti -fexceptions -march=i686 -O3 If I compile and link with this, everything is perfectly fine. However, if I explicitly add the include path to my MinGW includes (in D:\Dev\MinGW) via: CFLAGS = -Wall -pedantic -DEMERGESCHEMEENGINE_EXPORTS -mno-cygwin -frtti -fexceptions -march=i686 -O3 -ID:\Dev\MinGW\include I get: g++ -Wall -pedantic -DEMERGESCHEMEENGINE_EXPORTS -mno-cygwin -frtti -fexceptions -march=i686 -O3 -ID:\Dev\MinGW\include -c main.cpp -o .objs/main.o In file included from main.cpp:33: D:/Dev/MinGW/include/stdio.h:330: error: ISO C++ does not support `long long' In file included from D:/Dev/MinGW/include/stdio.h:399, from main.cpp:33: D:/Dev/MinGW/include/sys/types.h:32: error: ISO C++ does not support `long long' D:/Dev/MinGW/include/sys/types.h:110: error: ISO C++ does not support `long long' D:/Dev/MinGW/include/sys/types.h:115: error: ISO C++ does not support `long long' In file included from main.cpp:33: D:/Dev/MinGW/include/stdio.h:416:14: warning: use of C99 long long integer constant mingw32-make.exe: *** [.objs/main.o] Error 1 according to the stdio.h header: #ifdef __MSVCRT__ typedef long long fpos_t; #else typedef long fpos_t; #endif So I must assume that __MSVCRT__ is getting defined for some reason. Any idea why? I'm using the gcc-g++-3.4.5-20060117-1 build of g++. Chris -- Chris Sutcliffe http://ir0nh34d.blogspot.com http://emergedesktop.org |
From: Brian D. <br...@de...> - 2006-06-29 11:26:19
|
Chris Sutcliffe wrote: > g++ -Wall -pedantic -DEMERGESCHEMEENGINE_EXPORTS -mno-cygwin -frtti > -fexceptions -march=i686 -O3 -ID:\Dev\MinGW\include -c main.cpp -o > .objs/main.o > In file included from main.cpp:33: > D:/Dev/MinGW/include/stdio.h:330: error: ISO C++ does not support `long long' > In file included from D:/Dev/MinGW/include/stdio.h:399, > from main.cpp:33: > D:/Dev/MinGW/include/sys/types.h:32: error: ISO C++ does not support `long long' > D:/Dev/MinGW/include/sys/types.h:110: error: ISO C++ does not support > `long long' > D:/Dev/MinGW/include/sys/types.h:115: error: ISO C++ does not support > `long long' > In file included from main.cpp:33: > D:/Dev/MinGW/include/stdio.h:416:14: warning: use of C99 long long > integer constant You can see the same thing happening in this thread from January: <http://marc.theaimsgroup.com/?t=113643403700001&r=1&w=4>. I think the source of the problem was that the compiler knows to internally disable warnings when parsing "system" headers. But when you provide the include path of the system headers explicitly it is no longer clear to the compiler that these are still system headers and so you get the warnings. Based on <http://gcc.gnu.org/ml/gcc-patches/2001-02/msg01039.html> it would appear that anything found via absolute path is never considered a system header -- I guess since the system header locations specified in the specs file use "../" style relative paths to locate /usr/include. So it would seem the workaround would be to get rid of -ID:\Dev\MinGW\include since this should be found by default anyway. If you must specify it you could also try making it a relative path and see if that triggers it to be recognised as being the system-headers directory. Or get rid of -pedantic. Brian |