4

我用 Mingw32 在 Linux (Ubuntu 11.04) 中编译了一个小应用程序,它在 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,--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。 tpv-co​​nf.o tpv-main.o

它会生成一个 .exe 文件,该文件不是 linux 二进制文件。它在 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;
}

我已经尝试了我在网上找到的所有内容,但无济于事。

我错过了什么吗?

4

1 回答 1

1

确保将应用程序(我猜是在 PE32 可执行文件头中)标记为“GUI”应用程序,而不是控制台。也就是说,-mwindows与 mingw (而不是-mconsole)一起使用。您的测试源使用这个简单的命令(在 Ubuntu 15.10 上至少安装了 deb 包)编译得很好(然后它可以工作)gcc-mingw-w64-i686i686-w64-mingw32-gcc -o test.exe test.c -mwindows

我远不是 Windows 专家(甚至不是用户太多......),但据我所知,Windows 严格认为应用程序是基于控制台或 GUI 的,您可以使用-mwindows开关将其设置为“图形用户界面应用程序”。我认为,使用您尝试过的简单对话框需要应用程序基于 GUI,这可能是您没有这样做的问题。检查 .exe 的简单方法:

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

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

于 2016-03-26T14:23:48.270 回答