Кросс-скомпилированное консольное приложение Mingw32 ничего не делает в Windows XP - PullRequest
4 голосов
/ 05 октября 2011

Я скомпилировал небольшое приложение в Linux (Ubuntu 11.04) с Mingw32, и оно нормально работает в Wine, но ничего не работает в Wuindows (хотя и работает).

Конфигурирование:

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

(я пробовал без --target и без --buildс теми же результатами.)

Компиляция:

i586-mingw32msvc-g ++ -DHAVE_CONFIG_H -I.-I .. -DLOG_DOMAIN = \ "tpv \" -I .. -DWINVER = 0x0400 -D_ WINDOWS _ -Wall -g -Wl, - подсистема, консоль -mconsole -mms-bitfields -g-O2 -MT tpv-excepciones.o -MD -MP -MF .deps / tpv-excepciones.Tpo -c -o tpv-excepciones.o

Ссылка:

/ bin / bash ../libtool --tag = CXX --mode = link i586-mingw32msvc-g ++ -Wall -g -Wl, - подсистема, консоль -mconsole -mms-bitfields -g -O2 -lstdc ++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lodbc32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid -lvsws.o tpv-conf.o tpv-main.o

Создает файл .exe, который не является двоичным файлом linux.Он хорошо работает в Wine, но ничего не делает в Windows XP.

Чтение в Интернете Я добавил несколько флагов во время настройки:

-Wl, - подсистема, консоль -mconsole -mms-bitfields

Это программа:

#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;
}

Я перепробовал все, что нашел в Интернете, но безрезультатно.

Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 26 марта 2016

Обязательно пометьте приложение (я полагаю, в исполняемом заголовке PE32) как приложение с графическим интерфейсом, а не как консоль.То есть используйте -mwindows с mingw (а не -mconsole).Ваш тестовый исходный код прекрасно компилируется (тогда он работает) с помощью этой простой команды (в Ubuntu 15.10 по крайней мере с установленным пакетом deb gcc-mingw-w64-i686): i686-w64-mingw32-gcc -o test.exe test.c -mwindows.

Я далеко не эксперт по Windows (даже непользователя слишком много ...), но, насколько мне известно, Windows строго придерживается мнения, что приложение основано на консоли или графическом интерфейсе, вы можете использовать переключатель -mwindows, чтобы установить его как "приложение GUI".Я думаю, что для использования простого диалогового окна, которое вы пробовали, необходимо, чтобы приложение основывалось на графическом интерфейсе, и это может быть проблемой, потому что вы этого не сделали.Простой способ проверить ваш .exe:

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

Обратите внимание, однако, что приложение с графическим интерфейсом не имеет консоли, поэтому вы не можете просто printf() или другие stdio функции для записи вконсоль, потому что ... у вас нет консоли:)

0 голосов
/ 05 октября 2011
...