• Github 中文镜像
Sign inSign up
Watch966
Star102.4k
Fork61.8k
Branch: master
Switch branches/tags
Branches
Tags
  • master
  •  
K / 如何在 WSL 中解决 cannot execute binary file Exec format error 错误.md
移动浏览 Clone
加载中...
到移动设备上浏览
115 lines 8.27 kB
First commit on 21 May 2023
    • 译注:这是一篇机翻文章,我只做了排版和把两个技术名词替换回英文。一个中国不能访问的网站,英译中的水平持续吊打国内厂商,令人汗颜。其实翻译后排版没有任何错误,如果不是我需要替换为 Markdown 格式发布,等于零工作量,这家公司叫 Google。
    • 原文链接:How to fix exec format error 32-bit executable windows subsystem for linux in Gcc?

    Exec format error 消息通常在尝试在未针对其编译的操作系统上运行二进制可执行文件的上下文中遇到。当尝试在 64 位系统上运行 32 位可执行文件时,这一点尤为重要,反之亦然。当尝试在另一个操作系统上运行为一个操作系统编译的可执行文件时,例如在 Windows 上使用适用于 Linux 的 Windows 子系统(WSL)时,也会出现此问题。

    方法一:验证系统架构

    要修复在 WSL 上使用 GCC 编译 32 位可执行文件时出现的 Exec format error,您可以验证系统架构并相应地安装必要的包。以下是步骤:

    1. 打开终端并使用以下命令检查系统架构:
    uname -m
    

    这将输出机器硬件名称,64 位应为 x86_64,32 位应为 i686

    1. 如果架构是 64 位,则需要使用以下命令安装 32 位库:
    sudo apt-get install libc6:i386 libstdc++6:i386
    

    这将安装编译 32 位可执行文件所需的包。

    1. 如果架构是 32 位,则需要使用以下命令安装 64 位库:
    sudo apt-get install libc6-dev-amd64
    

    这将安装编译 64 位可执行文件所需的包。

    1. 安装所需的包后,您可以使用适当的标志编译代码。例如,要编译 32 位可执行文件,请像这样使用标志 -m32
    gcc -m32 -o myprogram myprogram.c
    

    这将生成一个名为 myprogram 的 32 位可执行文件。

    1. 要验证生成的可执行文件的体系结构,您可以使用这样的 file 命令:
    file myprogram
    

    这将输出可执行文件的体系结构,它应该与系统体系结构相匹配。

    通过执行这些步骤,您应该能够修复在 WSL 上使用 GCC 编译 32 位可执行文件时出现的 Exec format error

    方法二:安装所需的库和工具

    要在 WSL 上运行 GCC 时修复 Exec format error 32-bit executable,您需要安装所需的库和工具。以下是执行此操作的步骤:

    1. 打开终端并更新包列表:
    sudo apt-get update
    
    1. 安装所需的库和工具:
    sudo apt-get install build-essential
    sudo apt-get install gcc-multilib
    sudo apt-get install g++-multilib
    
    1. 验证安装:
    gcc -m32 -v
    

    此命令应输出 GCC 编译器的版本和配置。

    1. 编译并运行您的 32 位可执行文件:
    gcc -m32 -o myprogram myprogram.c
    ./myprogram
    

    这些命令将编译您的程序并将其作为 32 位可执行文件运行。

    就是这样! 通过安装所需的库和工具,您现在可以使用 GCC 在 WSL 上编译和运行 32 位可执行文件。

    方法三:为正确的体系结构编译可执行文件

    要修复 WSL 中的 Exec 格式错误 32 位可执行文件 问题,您可以针对正确的体系结构编译可执行文件。这可以通过以下步骤完成:

    1. 通过在终端中运行以下命令来检查系统的体系结构:
    uname -m
    
    1. 使用适当的体系结构标志编译可执行文件。例如,如果您的系统架构是 x86_64,则使用 -m32创建 32 位可执行文件的标志:
    gcc -m32 -o my32bitprogram myprogram.c
    
    1. 如果在编译过程中遇到错误,您可能需要为目标架构安装额外的库或依赖项。例如,在 Ubuntu 上,您可以使用以下命令安装 32 位库:
    sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
    
    1. 成功编译可执行文件后,通过导航到包含可执行文件的目录并运行,在 WSL 中运行它:
    ./my32bitprogram
    

    通过为正确的体系结构编译可执行文件,您应该能够运行它而不会在 WSL 中遇到 Exec format error 32-bit executable 问题。

    方法四:使用适当的命令解释器

    要修复使用 GCC 时 WSL 上的 Exec format error 32-bit executable 问题,您可以使用适当的命令解释器。以下是如何操作的示例:

    1. 打开 WSL 终端并导航到 C 文件所在的目录。

    2. 键入以下命令以使用 GCC 编译 C 文件:

    gcc -m32 -o output_file input_file.c
    

    此命令告诉 GCC 将输入文件编译为 32 位可执行文件并创建具有指定名称的输出文件。

    1. 如果您收到 Exec format error 消息,则表示 WSL 正在尝试使用错误的命令解释器运行 32 位可执行文件。要解决此问题,请通过键入以下命令使用适当的命令解释器:
    /usr/bin/ldd output_file
    

    此命令将向您显示输出文件的依赖项,包括运行它所需的命令解释器。

    1. 知道所需的命令解释器后,您可以通过键入以下命令使用它来运行输出文件:
    /lib/ld-linux.so.2 --library-path /lib output_file
    

    此命令告诉 WSL 使用适当的命令解释器来运行输出文件。

    通过执行这些步骤,您应该能够在 WSL 上编译和运行 32 位可执行文件,而不会遇到 Exec format error 消息。