Linux到Windows:x86_64-w64-mingw32-gcc无法编译64位可执行文件,我该如何解决?

时间:2019-06-13 19:29:36

标签: linux gcc x86-64 32bit-64bit mingw-w64

我使用的是Debian 9(稳定版),最近我决定安装mingw-w64,以便可以跨平台C / ++开发,因为我无法始终访问Windows计算机。几天前我第一次安装它以测试32位和64位版本时,它似乎可以工作,但是现在64位命令(x86_64-w64-mingw32-gcc)似乎只输出32位可执行文件,尽管事实上,它默认情况下应该只输出64位。我什至明确声明了选项-m64-march=x86_64来试图强制执行它,但是无论我现在尝试什么,它似乎只会执行32位构建。

作为参考,所有代码都包含三个文件:hello.c,hellofunc.c和hellofunc.h。文件hello.c只是调用hellofunc.c中定义的函数printHelloWorld:

void printHelloWorld(void){
    long z;

    printf("Hello World!\n");

    switch(sizeof(z)){
        case 4:
            printf("This program is 32-bit\n");
            break;
        case 8:
            printf("This program is 64-bit\n");
            break;
        default:
            printf("This program is of unknown bit size\n");
    }


    printf("Long int size is %i bytes long!\n", sizeof(z));
}

预期输出为“此程序为32位”或64位,并带有显式语句,该语句显示long变量的字节长度。我遇到的问题是,尽管使用了64位mingw-w64 gcc命令,但当我在Windows上对其进行测试时,它将显示32位消息,字节长度为4,而不是预期的8

同样,当我最初在下载后立即对其进行测试时,它可以按预期工作,并且我不知道在过去的几天中有什么可能改变了它的默认功能-我没有安装任何新东西,这样做是在尝试使用makefile文件(尽管此目录不包含一个)。另外,为了记录在案,我的Debian系统固有的默认gcc与-m32-m64命令完美配合,因此这并不意味着我的系统不具备该功能,并且...事实上,如果有的话,我希望行为会倒退,因为Linux似乎需要特殊的设置才能进行32位构建或在64位计算机上运行32位程序。

最后一次尝试自己理解问题时,我运行了命令x86_64-w64-mingw32-gcc -v -o hello.exe hello.c hellofunc.c -I .,以便获得编译器的完整命令序列,并且我还对它运行了gcc。 Here是我放在pastebin上的完整输出,仅供参考。我不是100%理解输出,但实际上所有配置和选项都应该输出64位?我不知道,我对Linux还是很陌生,仍然不完全了解出现问题时如何进行剖析-尤其是当某些事情与明确定义的功能相反时。

如果有人可以建议对此可能的修复程序或我可能没有想到的替代方案,我将不胜感激。我曾尝试过使用Googling寻求答案,但是x86_64-w64-ming32-gcc似乎只是在交谈中告诉新手,这显然是针对64位体系结构进行编译的默认方法。

感谢您的阅读和任何帮助,欢呼〜

0 个答案:

没有答案