c ++ - Mingw32 kryds kompileret konsol applikation gør ikke noget på Windows XP

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har lavet en lille app i Linux (Ubuntu 11.04) med Mingw32 og den kører ok i Vin, men gør ikke noget på Wuindows (selvom det kører).


Konfigurer:



  ./configure --host=i586-mingw32msvc --target=i586-mingw32msvc --build=i686-linux



(Jeg har prøvet uden --target og uden --build med de samme resultater.)


Udarbejde:



  i586-mingw32msvc-g ++ -DHAVE\_CONFIG\_H -I. -I .. -DLOG\_DOMAIN=\ 'tpv \' -I .. -DWINVER=0x0400 -D\_ WINDOWS \_ -Wall -g -Wl, - undersystem, konsol -monsons -mms-bitfields - g-O2-MT tpv-excepciones.o-MD-MP-MF. deps/tpv-excepciones.Tpo -c -o tpv-excepciones.o



Link:



  /bin/bash ../libtool --tag=CXX --mode=link i586-mingw32msvc-g ++ -Wall -g -Wl, - undersystem, konsol -monsons -mms-bitfields -g -O2 -lstdc ++ -lgcc - lodbc32-lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lodbc32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid -lmingw32 -Wl, -subsystem, konsol -o tpv.exe tpv-excepciones.o tpv-conf.o tpv-main.o



Det genererer en .exe-fil, som ikke er en Linux-binær.
Det kører OK i vin, men gør ingenting i Windows XP.


Læsning af internettet Jeg har tilføjet nogle flag i konfigurationstid:



  -Wl, - delsystem, konsol -monsonsol -mms-bitfields



Dette er programmet:


#include <windows.h>
#include "main.hh"


int main (int argc, char ** argv)
{
    MessageBox (0, "Joder!", "Ermmm...", MB\_OK);

    //utils::conf c ("configuracion.3D");

    //std::cout << "Valor de 'no': '" << c["TEXTO\_ERROR"] << "'" << std::endl;

    //std::cout << "..." << std::endl;

    return 0;
}


Jeg har prøvet alt jeg har fundet på internettet til ingen nytte.


Mangler jeg noget?

Bedste reference


Måtte disse links muligvis hjælpe


Manual til krydskompilering af en C ++-applikation fra Linux til Windows?


http://www.wxwidgets.org/docs/technote/crosscmp.htm[13]

Andre referencer 1


Sørg for at markere programmet (i den eksekverbare overskrift PE32) som et 'GUI' -program og ikke en konsol. Det vil sige, brug -mwindows med mingw (og ikke -mconsole). Din testkilde kompilerer fint (så fungerer det) med denne enkle kommando (på Ubuntu 15.10 i det mindste med deb-pakke gcc-mingw-w64-i686 installeret): i686-w64-mingw32-gcc -o test.exe test.c -mwindows.


Jeg er langt fra at være en Windows-ekspert (ikke engang en bruger for meget ...), men så vidt jeg ved, har Windows en streng opfattelse af, at en applikation er konsol eller GUI-baseret, du kan bruge -mwindows skift for at indstille dette som 'GUI-applikation'. Jeg tror, ​​at du ved hjælp af en simpel dialogboks har prøvet, at applikationen skal være GUI-baseret, og det kunne være problemet, at du ikke har gjort det. En enkel måde at kontrollere din .exe på:


lgb@antares:~$ file test.exe
test.exe: PE32 executable (GUI) Intel 80386, for MS Windows


Bemærk dog, at en GUI-applikation ikke har en konsol, så du kan ikke bare bruge printf() eller andre stdio funktioner til konsollen, fordi ... du har ikke en konsol :)