From: ben <be...@tt...> - 2008-03-11 10:55:14
|
Hi. I am trying to build a minGW cross-compiler (host i686-pc-linux-gnu, target i386-mingw32). I have used the x86-mingw32-build.sh script, version 1.1.1.1, with: assume GCC_VERSION 3.4.5-20060117-1 assume BINUTILS_VERSION 2.17.50-20070129-1 assume RUNTIME_VERSION 3.12 assume W32API_VERSION 3.9 The script works great; I can compile a 'hello world' program on linux and run it on windows, but it is a 'console' program instead of a 'windows' program (I am a unix guy; I don't know the right windows terminology-- what I mean is that clicking the 'hello world' program icon always starts a windows console, which then runs my 'hello world' application). I would like it to run without first starting the console. (There are various reasons why it is important for me to do this.) The FAQ indicates that I should specify the -mwindows option to the linker, but when I invoke: /usr3/xgcc-win32/bin/i386-mingw32-gcc -Wl,-mwindows -o hello.exe hello.c I get: ld: unrecognised emulation mode: windows Supported emulations: i386pe I have tried to find a way to build an ld with emulation support for 'windows' but have so far failed to do so. Can anyone tell me how to build such an 'ld', or how otherwise to cross compile an application that does not need to be launched from a console? Thanks, & regards, -ben. |
From: Earnie B. <ea...@us...> - 2008-03-11 11:12:09
|
Quoting ben <be...@tt...>: > > The FAQ indicates that I should specify the -mwindows option to the > linker, but when I invoke: > > /usr3/xgcc-win32/bin/i386-mingw32-gcc -Wl,-mwindows -o hello.exe hello.c > > I get: > > ld: unrecognised emulation mode: windows > Supported emulations: i386pe > > I have tried to find a way to build an ld with emulation support for > 'windows' but have so far failed to do so. > > Can anyone tell me how to build such an 'ld', or how otherwise to cross > compile an application that does not need to be launched from a console? > I suspect your GCC specs aren't quite correct. Under *link: you should see: %{mwindows:--subsystem windows} %{mconsole:--subsystem console} So instead of -mwindows you could add a -wl switch to GCC to pass the subsystem switch to the linker. Earnie |
From: Dave K. <dav...@ar...> - 2008-03-11 13:00:58
|
Earnie Boyd wrote on $TODAY: > Quoting ben <be...@tt...>: >> [ ... ] it is a 'console' program instead of a >> 'windows' program (I am a unix guy; I don't know the right windows >> terminology-- 'console' and 'windows' are exactly the right terms! >> The FAQ indicates that I should specify the -mwindows option to the >> linker, but when I invoke: >> >> /usr3/xgcc-win32/bin/i386-mingw32-gcc -Wl,-mwindows -o hello.exe hello.c >> >> I get: >> >> ld: unrecognised emulation mode: windows >> Supported emulations: i386pe >> >> I have tried to find a way to build an ld with emulation support for >> 'windows' but have so far failed to do so. Tree. Wrong one. Barking up. Stick. Wrong end of the. Getting hold of. Herring. Red. Goose chase. Wild. >> Can anyone tell me how to build such an 'ld', or how otherwise to cross >> compile an application that does not need to be launched from a console? >> > > I suspect your GCC specs aren't quite correct. Under *link: > you should see: > > %{mwindows:--subsystem windows} %{mconsole:--subsystem console} > > So instead of -mwindows you could add a -wl switch to GCC to pass the > subsystem switch to the linker. Surely the problem is that -mwindows is a flag for the compiler, not the linker, and the original commandline would have been correct if it had just omitted the "-Wl" from "-Wl,-mwindows" ? cheers, DaveK -- Can't think of a witty .sigline today.... |
From: ben <be...@tt...> - 2008-03-11 13:36:10
|
Dave, Thank you very much; you have it exactly right. It works fine now. The FAQ at http://www.mingw.org/mingwfaq.shtml#faq-ridconsole had confused me: #How to remove DOS command windows? # #In the link step add a -mwindows switch to the command line. so I thought it was a linker switch. I mention this here in case others have this problem and search on the quoted text. Regards, -ben. Dave Korn wrote: > Earnie Boyd wrote on $TODAY: > > >>Quoting ben <be...@tt...>: >> >>> [ ... ] it is a 'console' program instead of a >>>'windows' program (I am a unix guy; I don't know the right windows >>>terminology-- >> > > 'console' and 'windows' are exactly the right terms! > > >>>The FAQ indicates that I should specify the -mwindows option to the >>>linker, but when I invoke: >>> >>>/usr3/xgcc-win32/bin/i386-mingw32-gcc -Wl,-mwindows -o hello.exe hello.c >>> >>>I get: >>> >>>ld: unrecognised emulation mode: windows >>>Supported emulations: i386pe >>> >>>I have tried to find a way to build an ld with emulation support for >>>'windows' but have so far failed to do so. >> > > Tree. Wrong one. Barking up. Stick. Wrong end of the. Getting hold > of. Herring. Red. Goose chase. Wild. > > >>>Can anyone tell me how to build such an 'ld', or how otherwise to cross >>>compile an application that does not need to be launched from a console? >>> >> >>I suspect your GCC specs aren't quite correct. Under *link: >>you should see: >> >>%{mwindows:--subsystem windows} %{mconsole:--subsystem console} >> >>So instead of -mwindows you could add a -wl switch to GCC to pass the >>subsystem switch to the linker. > > > > Surely the problem is that -mwindows is a flag for the compiler, not the > linker, and the original commandline would have been correct if it had just > omitted the "-Wl" from "-Wl,-mwindows" ? > > > > cheers, > DaveK |
From: Dave K. <dav...@ar...> - 2008-03-11 16:16:42
|
ben wrote on 11 March 2008 13:36: > Dave, > Thank you very much; you have it exactly right. It works fine now. > > The FAQ at http://www.mingw.org/mingwfaq.shtml#faq-ridconsole had > confused me: > > #How to remove DOS command windows? > # > #In the link step add a -mwindows switch to the command line. > > so I thought it was a linker switch. I mention this here in > case others have this problem and search on the quoted text. Ah, yes, it is a subtle nuance of the language. The "link step" is the last step of building, during which linking is done; but that does not imply that you have to invoke (or pass arguments or switches to) the linker directly: it is just to distinguish from the compilation step. 1st stage (compile step) gcc -c *.c => *.o 2nd stage (link step) gcc *.o => *.exe So when it says "in the link step" and "add -mwindows to the commandline", it does mean to add it to the actual command line that you enter at the link step - not that you should try to add it to the internally-generated command line that gcc uses to invoke the linker as a subprocess. cheers, DaveK -- Can't think of a witty .sigline today.... |