Skip to content


Subversion checkout URL

You can clone with
Download ZIP


No floating point headers under MinGW #2

rafalrusin opened this Issue · 13 comments

3 participants


$ gcc -I ivmai-JCGO-eadc2b4/include/ -I ivmai-JCGO-eadc2b4/include/boehmgc/ -I ivmai-JCGO-eadc2b4/native/ -I classpath-0.93/native/fdlibm/ out/Main.c
In file included from ivmai-JCGO-eadc2b4/include/jcgortl.c:151:0,
from out/Main.c:640:
ivmai-JCGO-eadc2b4/include/jcgofp.h:106:25: fatal error: fpu_control.h: No such file or directory
compilation terminated.

Before, I had no ieeefp.h error, but this I found in gnu classpath (-I classpath-0.93/native/fdlibm/)

$ gcc --version
gcc.exe (GCC) 4.6.1

system MinGW

I used JCGO version 1.14


Actually I saw that it compiled with NOFP, but I don't think that it's a proper fix.

gcc -DJCGO_NOFP -I ivmai-JCGO-eadc2b4/include/ -I ivmai-JCGO-eadc2b4/include/boehmgc/ -I ivmai-JCGO-eadc2b4/native/ out/Main.c libs/x86/mingw/libgc.a


Proper fix is to use -D_FPU_CONTROL_H


It looks like you do not have a true MinGW otherwise you would have MCW_EM defined in float.h.
Your system looks like Cygwin. I suggest to use build commands like [4102] (from Samples files)


Yeah, I might have something old.
Anyway, I was surprised it all worked on multithreaded, socket app, on Windows. It translated dependent library fine (commons cli 1.2).
I wrote an article on it:
Great job!



@rafalrusin rafalrusin closed this

Interesting article. Thanks.
Some remarks:
1. I don't recommend to put your app source into JCGO tree, instead go to your app folder and execute (I suppose JCGO is unpacked to C:\JCGO):
c:\JCGO\jcgo.exe -sourcepath src;commons-cli-1.2-src/src/java netcat.NetCat @$~/

  • it will produce "jcgo_Out" folder (in your apps folder) containing generated C source

  1. About GCC options: "-DJCGO_INET -DJCGO_NOFP -DJCGO_WIN32 -DJCGO_THREADS" works for your app but this is not optimal, I could recommend the following GCC invocation args (for your case):
    gcc -IC:\JCGO\include -IC:\JCGO\include\boehmgc -IC:\JCGO\native -O2 -fwrapv -fno-strict-aliasing -DJCGO_MATHEXT -DJCGO_FFDATA -DJCGO_THREADS -DJCGO_WIN32 -DJCGO_PARALLEL -DJCGO_USEGCJ -DJCGO_INET -DJCGO_SYSWCHAR -DJCGO_NOJNI -fno-optimize-sibling-calls -s jcgo_Out/Main.c C:\JCGO\libs\x86\mingw\libgcmt.a -lws2_32

  2. About compiler: both are toolchains are supported (but the latter is more fresh and could produce code for Win64); other compilers for Windows (Cygwin, Visual Studio, Intel C++ compiler, Watcom, Digital Mars) are also supported by JCGO but the compiler options would differ from that for mingw.


About iOS: you are right and I'm aware of some apps in the Apple Store that are written in Java and translated using JCGO


About use of GC based on reference-counting (instead of BDWGC):
Java apps may contain cycles in the data structures (which cannot be handled correctly by reference counting).
More over, reference counting in a multi-threaded (on multi-core CPU) environment has a significant performance penalty on incrementing/decrementing a reference counter as this should be an atomic operation involving CPU core cache flushing (speaking in simple words).
On the other hand, there are algorithms that minimizes (or even eliminates) garbage collection pauses (e.g. BDWGC uses parallel mark algorithm running on all available CPU cores; about pause-less GC algorithms you could read, e.g., in


Thank you. I will refer these comments from the article.


Problem with hello world
gcc -IC:\JCGO\include -IC:\JCGO\include\boehmgc -IC:\JCGO\native -DJCGO_FFDATA -o hello jcgo_Out\Main.c C:\JCGO\libs\x86\mingw\libgc.a

In file included from C:\JCGO\include/jcgortl.c:151:0,
from jcgo_Out\Main.c:641:
C:\JCGO\include/jcgofp.h:95:20: fatal error: ieeefp.h: No such file or directory


Which compiler do you use? (The command that you use is for MinGW.) Anyway you could add -D_IEEEFP_H compiler argument.


I'm, use current version of

  • JCGO quick start tips (for Win32)
  • my System win 7 x 64

I suppose, you should make fix for current libs or change documentation...


It is a bug of MinGW (actually a bug of GCC that used by MinGW). The problem that C:\MinGW\lib\gcc\mingw32\4.8.1\include\float.h does not contain #include_next at the end of file (thus C:\MinGW\mingw32\include\float.h is never included thus _MCW_EM is not defined causing JCGO to try to get necessary definitions in fpu_control.h).
As far as I know, GCC 4.6.3 and 4.7.0 have correct float.h.
There are some discussions raised by MinGW maintainers, e.g.
As a workaround, I suggest to add the following command-line parameter: --include C:\MinGW\mingw32\include\float.h).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.