C编译程序在linux 运行中有但在windows中没有

C compiled program in linux run there but does not in windows

我是一名 C 语言新手,正在学习。我在我的电脑上下载了 Ubuntu 20.04 LTS WSL 用于编译 gcc 中的代码。问题是,在 Ubuntu 运行 中编译的代码很好,但是当我将它发送到 Windows 时,它说程序不能 运行 因为有没有与 x64 位兼容的版本 Windows。我用 -m64 标志编译它以确保它是 x64 位,但它仍然不是 Windows 上的 运行。这是什么原因?

我建议最好在 Windows 系统上编译您的 c 程序。交叉编译确实有效,但你说你是新手我建议在 windows 系统上安装 c 编译器并本地编译你的代码

二进制文件(编译后的程序)旨在用于特定系统:当您在 Ubuntu 中安装 gcc 时,它会自动默认为 gcc 的 Linux 版本,并且此版本只能创建一个 Linux 二进制文件。

正如 Linux 不能使用开箱即用的 .exe 文件一样,Windows 不能使用开箱即用的 Linux 二进制文件,这就是为什么你有“没有与 x64 位兼容的版本 Windows”,这是因为您尝试使用的文件与 x64 兼容 Linux.

知道这一点后,有多种方法可以从这里继续前进:

  1. 安装 windows 编译器并使用 windows 编译和 运行 您的代码
  2. 继续使用 WSL2 编译和运行编译您的代码
  3. 在 WSL 中安装一个 Windows 编译器,从 Ubuntu 构建,将文件复制到 windows 并从那里执行它
  4. 在您的 windows 机器上安装一个 Linux 编译器,从那里构建它,将它复制到 WSL 并在 Ubuntu
  5. 上执行
  6. 安装 Linux 机器并使用它来编译和 运行 您的代码本机

我可能会选择 1 或 5,WSL2 是一个不错的工具,但由于您仅限于终端,它对初学者来说并不友好,我会选择 OS,安装一个不错的初学者友好 IDE(我在 10 年前开始使用 Code::Blocks,我认为它仍然是最适合初学者的 IDE)并且开始开发时没有 WSL 的额外复杂性,甚至更糟,交叉编译。