-bash: ./arm-linux-gnueabihf-gcc: 没有那个文件或目录 的问题解决办法

本文介绍了在Ubuntu 16.04上遇到-bash: ./arm-linux-gnueabihf-gcc: 没有那个文件或目录问题的解决过程。通过安装32位运行库lib32stdc++6来解决64位系统中运行32位交叉编译器的不兼容问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        开发环境:Ubuntu 16.04.3 LTS(arch:x86_64)

1、安装交叉编译器:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux

        使用解压命令,解压交叉编译器到当前目录,安装结束。命令如下:

        tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.bz2  

2、查看arm交叉编译器的版本信息

        进入交叉编译器的安装位置下的bin目录下,执行‘arm-linux-gnueabihf-gcc -v’查看版本信息,操作命令如下:

        1)进入‘arm-linux-gnueabihf-gcc’所在的目录:

               cd gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_

所有依赖.a和.h都已到了main.c的目录下lib和include目录 arm-linux-gnueabihf-sigmastar-9.1.0-gcc main.c -o player -I ./include/ -L ./lib/ /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/9.1.0/../../../../arm-linux-gnueabihf/bin/ld: /tmp/ccDRtqQa.o: in function `main': main.c:(.text+0x1d2): undefined reference to `stream_player_create' /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/9.1.0/../../../../arm-linux-gnueabihf/bin/ld: main.c:(.text+0x214): undefined reference to `stream_player_set_callback' /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/9.1.0/../../../../arm-linux-gnueabihf/bin/ld: main.c:(.text+0x22a): undefined reference to `stream_player_play_url' /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/9.1.0/../../../../arm-linux-gnueabihf/bin/ld: main.c:(.text+0x250): undefined reference to `stream_player_destroy' /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/9.1.0/../../../../arm-linux-gnueabihf/bin/ld: main.c:(.text+0x278): undefined reference to `stream_player_buffer_level' /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/9.1.0/../../../../arm-linux-gnueabihf/bin/ld: main.c:(.text+0x2b4): undefined reference to `stream_player_stop' /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/9.1.0/../../../../arm-linux-gnueabihf/bin/ld: main.c:(.text+0x2f0): undefined reference to `stream_player_destroy' collect2: error: ld returned 1 exit status
07-08
<think>嗯,用户之前遇到了编译错误,是关于缺少jpeglib.h头文件的,现在他们解决了那个问题之后,运行生成的二进制文件时又出现了新的错误:-bash: ./v4l2_app_arm: cannot execute binary file: Exec format error。我需要先理解这个错误的原因,然后给出解决方案。 首先,这个错误通常表示系统尝试执行的二进制文件格式不正确。可能的情况包括架构不匹配,比如在x86系统上运行为ARM编译的程序,文件损坏,没有正确的可执行权限。不过权限问题通常会有不同的错误提示,比如Permission denied,所以更可能的是架构问题。 用户之前是在Ubuntu系统下编译的,路径中有v4l2_app_arm文件名里带有“arm”,可能他们是在交叉编译,目标平台是ARM架构,而当前系统是x86_64,所以在本地运行就会报这个错误。者可能编译的时候没有正确指定交叉编译工具链,导致生成的文件格式不对。 需要验证文件的架构。用户可以使用file命令检查二进制文件的信息,比如运行file ./v4l2_app_arm,如果是ARM架构,输出会显示ELF 32-bit LSB executable, ARM之类的信息。而如果是为本机编译的,应该是x86_64。 另外,用户是否在交叉编译环境下?比如使用arm-linux-gnueabihf-gcc而不是普通的gcc。如果Makefile里没有正确指定交叉编译器,可能还是用默认的gcc编译,生成x86的可执行文件,但用户可能误以为是为ARM编译的,者在错误的平台上运行。 也有可能用户确实是在ARM设备上运行,但二进制文件损坏,者动态链接库有问题,但这种情况较少见,错误信息通常是其他提示,比如找不到动态库。 所以,解决方案可能包括: 1. 确认二进制文件的架构,使用file命令。 2. 如果是交叉编译,确保使用正确的工具链,并在目标平台(ARM设备)上运行。 3. 如果要在本机运行,需要重新编译为x86架构。 4. 检查编译命令是否正确,是否指定了正确的编译器。 用户之前可能已经安装了libjpeg-dev,解决了头文件问题,但可能在编译时没有正确使用交叉编译器,导致生成的文件无法在当前系统执行。 另外,用户可能是在x86的Ubuntu系统上编译,但希望生成ARM的可执行文件,所以需要使用交叉编译工具链。如果没有安装对应的工具链,Makefile中没有正确指定,那么生成的二进制文件可能无法运行,导致Exec格式错误。 所以,回答应该分步骤: - 检查文件架构。 - 根据结果,指导安装交叉编译工具链,者更换编译环境到目标平台。 - 者重新编译为本机架构。</think>遇到 `-bash: ./v4l2_app_arm: cannot execute binary file: Exec format error` 错误,通常是因为 **二进制文件的格式与当前系统架构不兼容**。以下是可能原因及解决方法: --- ### **1. 文件架构不匹配** - **现象**:在 x86/x64 系统(如普通 PC 虚拟机)上运行为 ARM 架构编译的程序。 - **验证方法**:用 `file` 命令检查二进制文件架构: ```bash file ./v4l2_app_arm ``` 输出可能类似: ``` ./v4l2_app_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV) ... ``` 若显示 `ARM`,则说明这是为 ARM 设备(如树莓派、嵌入式开发板)编译的程序,**无法直接在 x86/x64 系统上运行**。 - **解决方案**: - **方法 1**:将程序拷贝到 ARM 设备(如树莓派)上运行。 - **方法 2**:在本机重新编译为当前系统架构(x86/x64),修改 `Makefile` 中编译器(如将 `arm-linux-gnueabihf-gcc` 改为 `gcc`)。 --- ### **2. 交叉编译工具链未正确使用** - **现象**:在 x86 系统上为 ARM 交叉编译时,未正确指定工具链。 - **验证方法**:检查 `Makefile` 中的编译器是否为 ARM 交叉编译器(如 `arm-linux-gnueabihf-gcc`)。 - **解决方案**: - **安装交叉编译工具链**(以 ARM 为例): ```bash sudo apt-get install gcc-arm-linux-gnueabihf ``` - **修改 `Makefile`**,指定 ARM 编译器: ```makefile # 修改前(默认 gcc) CC = gcc # 修改后(使用 ARM 交叉编译器) CC = arm-linux-gnueabihf-gcc ``` --- ### **3. 文件损坏权限问题** - **现象**:二进制文件未完整编译被破坏。 - **验证方法**: - 检查文件大小是否异常(如几 KB 可能是编译失败)。 - 检查权限是否可执行: ```bash ls -l ./v4l2_app_arm chmod +x ./v4l2_app_arm # 若无执行权限,添加权限 ``` - **解决方案**:清理并重新编译: ```bash make clean make ``` --- ### **关键总结** - **错误本质**:系统无法执行与自身架构不兼容的二进制文件- **解决方向**: - 若为 ARM 程序,需在 ARM 设备运行。 - 若需在 x86 系统运行,重新编译为本机架构。 - 交叉编译时确保工具链正确配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值