Mingw32交叉编译的控制台应用在Windows XP上没有任何反应

4

我在Linux(Ubuntu 11.04)上使用Mingw32编译了一个小应用程序,在Wine中运行正常,但在Windows上却没有任何作用(虽然它可以运行)。

配置:

./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,--subsystem,console -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,--subsystem,console -mconsole -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,console -o tpv.exe tpv-excepciones.o tpv-conf.o tpv-main.o

它生成的是一个不是Linux二进制文件的.exe文件。在Wine中运行正常,但在Windows XP上没有任何作用。

通过阅读网页,我在配置时添加了一些标志:

-Wl,--subsystem,console -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;
}

我已经尝试过网上找到的所有方法,但都没有效果。我是不是漏掉了什么?

我已经从我的Mac交叉编译到Windows,而且我没有需要任何特殊标志。尝试不使用任何东西,并使用直接的mingw进行简单示例,而不是使用configure等。 - Geoffroy
3
我的声誉在这里不允许我进行完整的回答...所以。问题出在libtool上,它创建的可执行文件在“.libs”目录中可以完美运行。 - Manuel
听起来你只是没有复制MinGW32 CRT dlls。 - Steve-o
它真的应该是 main.hh 还是可能是 main.h 吗? - Error withit
你尝试在 Windows 上使用调试器来调试那个交叉编译的二进制文件了吗? - Kos
1个回答

1
请确保将应用程序(我猜是在PE32可执行文件头中)标记为“GUI”应用程序,而不是控制台。也就是说,使用mingw的-mwindows(而不是-mconsole)。至少在Ubuntu 15.10上安装了deb包gcc-mingw-w64-i686的情况下,您的测试源代码可以使用以下简单命令编译(然后它就能工作了):i686-w64-mingw32-gcc -o test.exe test.c -mwindows
我远非Windows专家(甚至不是太常用...),但据我所知,Windows对应用程序是控制台还是GUI有严格的观点,您可以使用-mwindows开关将其设置为“GUI应用程序”。我认为,您尝试使用简单对话框需要应用程序基于GUI,这可能是问题所在,您还没有做到这一点。检查您的.exe的一个简单方法:
lgb@antares:~$ file test.exe
test.exe: PE32 executable (GUI) Intel 80386, for MS Windows

请注意,GUI应用程序没有控制台,因此您不能只使用printf()或其他stdio函数来写入控制台,因为...你没有控制台 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接