GCC 无法在 64 位编译 C 程序
Posted
技术标签:
【中文标题】GCC 无法在 64 位编译 C 程序【英文标题】:GCC can't compile C program at 64-bit 【发布时间】:2015-12-22 22:12:15 【问题描述】:所以,真正的问题是我在这个网站内外进行了很多研究,但没有这样的问题或解决方案可以帮助我。
我正在学习 C 编码。这没什么大不了的,因为我非常了解 Python 和 C#(Unity)。问题是我正在尝试做我以前在 Python 上做过的应用程序,但我遇到了一个问题:我正在 Debian 8 虚拟机(Oracle 的 Virtual Box)上编译我的程序,如下所示:gcc -lm -m64 -o file.exe file.c
。
发生的情况是,当我回到我的 Windows 10 机器(非虚拟机)时,它返回我尝试运行的程序是不受支持的 16 位版本的程序,并且无法运行它。
我真的进行了很多研究,并且可以找到一些东西,女巫我做到了......但没有任何改变......所以,我认为在联系 GCC 程序或我的脚本 bhaskara.c 时出现错误(是的,它是bhaskara 公式计算器):
#include <stdio.h>
#include <math.h>
float main()
double a, b, c, x1, x2;
double delta;
double d, e;
printf("NOTE: If the numbers are integers, use .0 at the end(eg. 1 = 1.0)\n");
printf("A = ");
scanf("%f", &a);
printf("B = ");
scanf("%f", &b);
printf("C = ");
scanf("%f", &c);
d = b*b;
e = (d + 4*a*c);
delta = sqrt(e);
printf("Delta = %f\n", delta);
x1 = (-b + delta)/2;
printf("X1 = %f\n", x1);
x2 = (-b - delta)/2;
printf("X2 = %f\n", x2);
代码很丑,其实只是一个测试...
我尝试过的事情: - 重新安装 GCC -运行不同的选项(-m32 和 -m64) - 使用 *.exe 编译,在使用前添加(不知道是否有意义) - 将浮点数转换为双精度数(代码;据我所知,双精度数使用更多字节)
我的问题: 我能做些什么来修复它?我的脚本是否有错误,导致它无法成为 64 位?我是否使用了错误版本的 GCC? (4.9.2;这就是我所知道的一切......)我可以使用其他选项来选择处理器类型吗?并使其可用于各种处理器? 在此先感谢,如果有人能回答我是什么问题,我将不胜感激,我对编译真的很陌生...如果我的问题很难理解,请在下面留下评论,以便我进行编辑。
【问题讨论】:
这就是你的 Python 和 C# 经验让你误入歧途的地方。 为什么你认为这应该完全有效?为什么 Debian 的 GCC 默认会构建 Windows 格式的可执行文件? Debian 是一个 Linux 发行版。为该平台编译的可执行文件不会在任何 Windows 中运行。 你需要mingw
,而不是virtual box+debian+gcc
....
你忘记在你的 Windows 机器上安装 linux VM
【参考方案1】:
绝对没有理由期望 GCC 的 Debian 安装默认构建 Windows 可执行文件。如果你在输出上运行file
,你可能会看到如下内容:
ELF 64 位 LSB 可执行文件,x86-64,版本 1 (GNU/Linux)
您需要这样的可执行文件:
PE32+ 可执行 (GUI) x86-64,适用于 MS Windows
这是两种完全不同的文件格式。 Windows 不会运行 Linux 可执行文件(使用某种模拟器除外),Linux 不会运行 Windows 可执行文件(使用某种模拟器除外)。您可以使用交叉编译器在 Windows 上构建 Linux 应用程序或在 Linux 上构建 Windows 应用程序。
【讨论】:
一些关于交叉编译的信息(可能需要更新 64 位):***.com/a/182456/10077以上是关于GCC 无法在 64 位编译 C 程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 gcc 32bit 编译,作为带有 -m64 的 64 位程序