windows MinGW release version can't compile
Opened this issue · 14 comments
D:\Work\Library\fog\Fog\Build>mingw32-make
Scanning dependencies of target Fog
[ 0%] Building CXX object CMakeFiles/Fog.dir/Fog/Core/Collection/Util.cpp.obj
In file included from D:/Work/Library/fog/Fog/Fog/Core/C++/IntrinMMX.h:12:0,
from D:/Work/Library/fog/Fog/Fog/Core/C++/StdHeaders.h:35,
from D:/Work/Library/fog/Fog/Fog/Core/C++/Base.h:21,
from D:/Work/Library/fog/Fog/Fog/Core/Global/Global.h:11,
from D:/Work/Library/fog/Fog/Fog/Core/Collection/Util.h:11,
from D:\Work\Library\fog\Fog\Fog\Core\Collection\Util.cpp:12:
d:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/include/mmintrin.h:32:3: error: #e
rror "MMX instruction set not enabled"
In file included from D:/Work/Library/fog/Fog/Fog/Core/C++/StdHeaders.h:35:0,
from D:/Work/Library/fog/Fog/Fog/Core/C++/Base.h:21,
from D:/Work/Library/fog/Fog/Fog/Core/Global/Global.h:11,
from D:/Work/Library/fog/Fog/Fog/Core/Collection/Util.h:11,
from D:\Work\Library\fog\Fog\Fog\Core\Collection\Util.cpp:12:
D:/Work/Library/fog/Fog/Fog/Core/C++/IntrinMMX.h:128:3: error: '__m64' does not
name a type
In file included from D:/Work/Library/fog/Fog/Fog/Core/Global/Global.h:13:0,
from D:/Work/Library/fog/Fog/Fog/Core/Collection/Util.h:11,
from D:\Work\Library\fog\Fog\Fog\Core\Collection\Util.cpp:12:
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1453:3: error: expected identifier
before '*' token
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1453:3: warning: 'cdecl' attribute
only applies to function types [-Wattributes]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1453:80: error: ISO C++ forbids de
claration of 'Range' with no type [-fpermissive]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1453:80: error: 'Range' declared a
s function returning a function
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1534:3: error: expected identifier
before '*' token
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1534:3: warning: 'cdecl' attribute
only applies to function types [-Wattributes]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1534:80: error: ISO C++ forbids de
claration of 'Range' with no type [-fpermissive]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1534:80: error: 'Range' declared a
s function returning a function
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1722:3: error: expected identifier
before '*' token
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1722:3: warning: 'cdecl' attribute
only applies to function types [-Wattributes]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1722:119: error: ISO C++ forbids d
eclaration of 'TransformF' with no type [-fpermissive]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1722:119: error: 'TransformF' decl
ared as function returning a function
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1734:3: error: expected identifier
before '*' token
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1734:3: warning: 'cdecl' attribute
only applies to function types [-Wattributes]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1734:87: error: ISO C++ forbids de
claration of 'PointF' with no type [-fpermissive]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1734:87: error: 'PointF' declared
as function returning a function
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1747:3: error: expected identifier
before '*' token
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1747:3: warning: 'cdecl' attribute
only applies to function types [-Wattributes]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1747:119: error: ISO C++ forbids d
eclaration of 'TransformD' with no type [-fpermissive]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1747:119: error: 'TransformD' decl
ared as function returning a function
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1764:3: error: expected identifier
before '*' token
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1764:3: warning: 'cdecl' attribute
only applies to function types [-Wattributes]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1764:87: error: ISO C++ forbids de
claration of 'PointD' with no type [-fpermissive]
D:/Work/Library/fog/Fog/Fog/Core/Global/Api.h:1764:87: error: 'PointD' declared
as function returning a function
mingw32-make[2]: *** [CMakeFiles/Fog.dir/Fog/Core/Collection/Util.cpp.obj] Error
1
mingw32-make[1]: *** [CMakeFiles/Fog.dir/all] Error 2
mingw32-make: *** [all] Error 2
D:\Work\Library\fog\Fog\Build>
Am I missing something?
Original issue reported on code.google.com by weasley...@gmail.com
on 12 Oct 2011 at 5:43
D:\Work\Library\fog\Fog\Scripts>mkdir ..\Build
子目录或文件 ..\Build 已经存在。
D:\Work\Library\fog\Fog\Scripts>cd ..\Build
D:\Work\Library\fog\Fog\Build>cmake .. -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Re
lease -DFOG_BUILD_BENCH=True -DFOG_BUILD_EXAMPLES=True
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: D:/MinGW/bin/gcc.exe
-- Check for working C compiler: D:/MinGW/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: D:/MinGW/bin/g++.exe
-- Check for working CXX compiler: D:/MinGW/bin/g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
== ====================================================
== [Fog-Framework - Normal Build (Release)]
== ====================================================
-- Initializing FOG_DIR=D:/Work/Library/fog/Fog
-- Looking for include files CMAKE_HAVE_PTHREAD_H
-- Looking for include files CMAKE_HAVE_PTHREAD_H - not found.
-- Found Threads: TRUE
-- Performing Test FOG_CC_HAS_FMERGE_ALL_CONSTANTS
-- Performing Test FOG_CC_HAS_FMERGE_ALL_CONSTANTS - Success
-- Performing Test FOG_CC_HAS_FNO_KEEP_STATIC_CONSTS
-- Performing Test FOG_CC_HAS_FNO_KEEP_STATIC_CONSTS - Success
-- Performing Test FOG_CC_HAS_FLTO
-- Performing Test FOG_CC_HAS_FLTO - Failed
-- Performing Test FOG_CC_HAS_WINLINE
-- Performing Test FOG_CC_HAS_WINLINE - Success
-- Performing Test FOG_CC_HAS_WNO_ENUM_COMPARE
-- Performing Test FOG_CC_HAS_WNO_ENUM_COMPARE - Success
-- Check if the system is big endian
-- Searching 16 bit integer
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Using unsigned short
-- Check if the system is big endian - little endian
-- Check size of void*
-- Check size of void* - done
-- Check size of int
-- Check size of int - done
-- Check size of long
-- Check size of long - done
-- Check size of wchar_t
-- Check size of wchar_t - done
-- Looking for include files FOG_HAVE_FLOAT_H
-- Looking for include files FOG_HAVE_FLOAT_H - found
-- Looking for include files FOG_HAVE_LIMITS_H
-- Looking for include files FOG_HAVE_LIMITS_H - found
-- Looking for include files FOG_HAVE_STDARG_H
-- Looking for include files FOG_HAVE_STDARG_H - found
-- Looking for include files FOG_HAVE_STDINT_H
-- Looking for include files FOG_HAVE_STDINT_H - found
-- Configuring Fog/Core
Adding optimized file Fog/Core/Tools/List_SSE2.cpp (SSE2)
-- Configuring Fog/G2d
Adding optimized file Fog/G2d/Geometry/PathClipper_SSE.cpp (SSE)
Adding optimized file Fog/G2d/Geometry/Transform_SSE.cpp (SSE)
Adding optimized file Fog/G2d/Geometry/PathClipper_SSE2.cpp (SSE2)
Adding optimized file Fog/G2d/Geometry/Transform_SSE2.cpp (SSE2)
Adding optimized file Fog/G2d/Imaging/Filters/FeColorMatrix_SSE.cpp (SSE)
-- Looking for include files FOG_HAVE_LIBJPEG
-- Looking for include files FOG_HAVE_LIBJPEG - found
-- Looking for include files FOG_HAVE_LIBPNG
-- Looking for include files FOG_HAVE_LIBPNG - found
Adding optimized file Fog/G2d/Painting/RasterPaintEngine_SSE2.cpp (SSE2)
Adding optimized file Fog/G2d/Source/Color_SSE2.cpp (SSE2)
Adding optimized file Fog/G2d/Tools/Region_SSE2.cpp (SSE2)
-- Configuring Fog/UI
-- Configuring Fog/Svg
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Work/Library/fog/Fog/Build
D:\Work\Library\fog\Fog\Build>cd ..\Scripts
D:\Work\Library\fog\Fog\Scripts>pause
请按任意键继续. . .
this is configure output.
Original comment by weasley...@gmail.com
on 12 Oct 2011 at 5:44
Hello,
this is similar to Issue #35. I fixed some errors today, but not all of them.
Marking as accepted, will be fixed soon
Original comment by kobalicek.petr
on 12 Oct 2011 at 6:14
Original comment by kobalicek.petr
on 12 Oct 2011 at 6:14
- Changed state: Accepted
Thank you very much! I have compiled it with modified some code, mainly in
CompileGcc.h, I commented the __attribute__((always_inline)) and
__attribute__((cdecl)),but it's still a lot of warnings (all of them are
inline fault), and I modified the CMakeLists.txt It's very strange that some of
Header can not use MMX/SSE2, in CMakeLists.txt I found that you added them into
source files' property, but it still can not pass compile, so I added -mmmx
-msse -msse2 to all file (CMAKE_CXX_FLAGS) :(
Hopes these information could help you, thx :)
Original comment by weasley...@gmail.com
on 12 Oct 2011 at 9:22
Temporarily fixed by r777, but the code generated by MinGW is larger (About
60%) and slow (about 10-15%).
Original comment by kobalicek.petr
on 13 Oct 2011 at 3:06
but, my other modules is compiled with mingw:( and the fog don't export
portable c interface, i can only c++ interface that can not cross compilers.
is using a c interface a plan in your todo list?
thank you anyway:)
�� 2011-10-13 ����11:07�� <fog@googlecode.com>���
Original comment by weasley...@gmail.com
on 13 Oct 2011 at 3:16
There is a C like interface, but it's not designed to work with a pure C code
at this moment. It's designed mainly as a large virtual function table, where
the base functions can be replaced by optimized ones (another effect of this is
that many simple classes are not exported). Another idea is to simplify
bindings to other programming languages that can accept function & function
prototype declaration.
So you can use the slower MinGW version at this time and hope that these errors
will be fixed by MinGW team some day. BTW: Why not to use MSVC to compile all
your modules? It produces really good binaries;)
Original comment by kobalicek.petr
on 13 Oct 2011 at 4:02
thank you for your explaining :)
i want to write a bindings to lua language, but msvc has issues about
msvcrt.dll :(
maybe a simple improve can change these imcompatibles between compilers and
use c++ interface with different compilers, that is just export a extern
"c" function to initialze the virtual function table, and all your shell
class use functions in table, so any programs use fog can just link with
this c named function, without any other dependencies. so you can compile
your program with mingw or any other compilers, but link with fog compiled
with msvc, with a single symbol, maybe named _fog_api in fog.dll's symbol
table.
�� 2011-10-14 ����12:02�� <fog@googlecode.com>���
Original comment by weasley...@gmail.com
on 13 Oct 2011 at 4:46
I have used MSVC build Fog.dll and MinGW successfully. I just modify the Api.h
file, changed this line:
extern FOG_API Api _api;
to this:
extern "C" FOG_API Api _api;
maybe you can think about this change, this makes different binary can work
together :-)
Original comment by weasley...@gmail.com
on 14 Oct 2011 at 5:59
This is good point.
I think that fog_api would be better and I'm going to change this early. It's
good to know that it's possible to use mixture of compilers.
Original comment by kobalicek.petr
on 14 Oct 2011 at 12:20
The fog_api is now exported, thanks!
Original comment by kobalicek.petr
on 16 Oct 2011 at 7:09
- Changed state: Fixed
Sorry, But, I still can't compile the MinGW version. It seems that some file
need MMX support, but you don't add -mmmx flags to these files' command line.
D:\Work\Library\fog\Fog\Build>make
Scanning dependencies of target Fog
[ 0%] Building CXX object CMakeFiles/Fog.dir/Fog/Core/Collection/Util.cpp.obj
In file included from D:/Work/Library/fog/Fog/Fog/Core/C++/IntrinMMX.h:12:0,
from D:/Work/Library/fog/Fog/Fog/Core/C++/StdHeaders.h:35,
from D:/Work/Library/fog/Fog/Fog/Core/C++/Base.h:19,
from D:/Work/Library/fog/Fog/Fog/Core/Global/Global.h:11,
from D:/Work/Library/fog/Fog/Fog/Core/Collection/Util.h:11,
from D:\Work\Library\fog\Fog\Fog\Core\Collection\Util.cpp:12:
d:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.6.1/include/mmintrin.h:32:3: error: #e
rror "MMX instruction set not enabled"
In file included from D:/Work/Library/fog/Fog/Fog/Core/C++/StdHeaders.h:35:0,
from D:/Work/Library/fog/Fog/Fog/Core/C++/Base.h:19,
from D:/Work/Library/fog/Fog/Fog/Core/Global/Global.h:11,
from D:/Work/Library/fog/Fog/Fog/Core/Collection/Util.h:11,
from D:\Work\Library\fog\Fog\Fog\Core\Collection\Util.cpp:12:
D:/Work/Library/fog/Fog/Fog/Core/C++/IntrinMMX.h:128:3: error: '__m64' does not
name a type
make[2]: *** [CMakeFiles/Fog.dir/Fog/Core/Collection/Util.cpp.obj] Error 1
make[1]: *** [CMakeFiles/Fog.dir/all] Error 2
make: *** [all] Error 2
Original comment by weasley...@gmail.com
on 20 Oct 2011 at 3:41
Ok, reopening, I'm going to look more closely at this issue
Original comment by kobalicek.petr
on 20 Oct 2011 at 3:29
- Changed state: Accepted
MinGW can compile fog now, thank you. I will do some benchmark about MSVC
version and MinGW version (and also Qt4, cairo and gdiplus).
now I only have MSVC version of Fog, the result is likely fog is the fastest
library on windows in these four. and the second is gdiplus (just slow 1/3 with
fog), the third is cairo (slow 3 times than fog), the last is Qt4 (very very
slow :-(
Original comment by weasley...@gmail.com
on 9 Nov 2011 at 4:45