GCC 无法编译 64 位 C 程序
GCC can't compile C program at 64-bit
所以,真正的交易是我在这个网站内外进行了很多研究,但没有这样的问题或解决方案可以帮助我。
我正在学习 C 编码。这没什么大不了的,因为我非常了解 Python 和 C#(Unity)。问题是我正在尝试做我以前在 Python 上做过的应用程序,但我遇到了一个问题:我正在 Debian 8 虚拟机(Oracle 的 Virtual Box)上编译我的程序,如下所示: gcc -lm -m64 -o file.exe file.c
。
发生的事情是,当我回到我的 Windows 10 机器(不是虚拟机)时,它 returns 我试图 运行 的程序是一个不受支持的 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)
- 编译 whith *.exe 并且没有它在使用之前添加它(不知道它是否有意义)
- 将浮点数变成双精度数(代码;据我所知,双精度数使用更多字节)
我的问题:
我能做些什么来修复它?我的脚本是否存在错误,导致它无法成为 64 位版本?我使用的是错误版本的 GCC 吗? (4.9.2;这就是我所知道的一切......)是否有任何其他选项可用于选择处理器类型?并使其适用于各种处理器?
在此先感谢,如果有人能回答我问题是什么,我将不胜感激,我真的是编译新手...如果我的问题难以理解,请在下面留下评论,以便我进行编辑。
绝对没有理由期望 GCC 的 Debian 安装默认构建 Windows 可执行文件。如果你 运行 file
在输出上,你可能会看到这样的东西:
ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux)
您需要这样的可执行文件:
PE32+ executable (GUI) x86-64, for MS Windows
这是两种完全不同的文件格式。 Windows 不会 运行 Linux 可执行文件(除了使用某种模拟器)并且 Linux 不会 运行 Windows 可执行文件(除了使用某种模拟器)模拟器)。您可以使用交叉编译器在 Windows 上构建 Linux 应用程序或在 Linux.
上构建 Windows 应用程序
所以,真正的交易是我在这个网站内外进行了很多研究,但没有这样的问题或解决方案可以帮助我。
我正在学习 C 编码。这没什么大不了的,因为我非常了解 Python 和 C#(Unity)。问题是我正在尝试做我以前在 Python 上做过的应用程序,但我遇到了一个问题:我正在 Debian 8 虚拟机(Oracle 的 Virtual Box)上编译我的程序,如下所示: gcc -lm -m64 -o file.exe file.c
。
发生的事情是,当我回到我的 Windows 10 机器(不是虚拟机)时,它 returns 我试图 运行 的程序是一个不受支持的 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) - 编译 whith *.exe 并且没有它在使用之前添加它(不知道它是否有意义) - 将浮点数变成双精度数(代码;据我所知,双精度数使用更多字节)
我的问题: 我能做些什么来修复它?我的脚本是否存在错误,导致它无法成为 64 位版本?我使用的是错误版本的 GCC 吗? (4.9.2;这就是我所知道的一切......)是否有任何其他选项可用于选择处理器类型?并使其适用于各种处理器? 在此先感谢,如果有人能回答我问题是什么,我将不胜感激,我真的是编译新手...如果我的问题难以理解,请在下面留下评论,以便我进行编辑。
绝对没有理由期望 GCC 的 Debian 安装默认构建 Windows 可执行文件。如果你 运行 file
在输出上,你可能会看到这样的东西:
ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux)
您需要这样的可执行文件:
PE32+ executable (GUI) x86-64, for MS Windows
这是两种完全不同的文件格式。 Windows 不会 运行 Linux 可执行文件(除了使用某种模拟器)并且 Linux 不会 运行 Windows 可执行文件(除了使用某种模拟器)模拟器)。您可以使用交叉编译器在 Windows 上构建 Linux 应用程序或在 Linux.
上构建 Windows 应用程序