arm-ostl-linux-gnueabi-g++交叉编译程序

本文档详细记录了在安装和配置PetaLinux环境中遇到的问题及其解决方案,包括uboot-mkimage命令找不到、GLIBCXX库版本不匹配、dpkg锁定、bitbake配置失败、启动进入initramfs、内核模块编译错误、终端启动错误、内存不足及OpenCV内存分配错误等,并提供了相应的解决步骤。

是注释掉CXX,你激活那个环境后,它会自动设置环境变量

source /opt/mp157/sdk/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

make

hqyj@ubuntu:~$ echo $ PATH | tr ':' '\n' | grep -E "bin|gcc|arm|aarch" E:-未设置}":~$ echo "CROSS_COMPILE路径: ${CROSS_COMPILE CROSS_COMPILE路径: 未设置 未设置}"ntu:~$ echo "TOOLCHAIN路径: ${TOOLCHAIN_PATH:-� TOOLCHAIN路径: 未设置 hqyj@ubuntu:~$ find /usr/bin /usr/local/bin /opt -name "*-gcc" 2>/dev/null /usr/bin/c99-gcc /usr/bin/c89-gcc /usr/bin/x86_64-linux-gnu-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/share/gcc-arm-none-eabi/bin/arm-none-eabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/share/gcc-arm-none-eabi/bin/arm-none-eabi-gcc hqyj@ubuntu:~$ find / -path "*/bin/*-linux-*gcc" 2>/dev/null | grep -E "arm|aarch" /home/hqyj/Downloads/gcc-4.6.4/bin/arm-linux-gcc /home/hqyj/Downloads/gcc-4.6.4/bin/arm-arm1176jzfssf-linux-gnueabi-gcc /home/hqyj/Downloads/gcc-4.6.4/bin/arm-none-linux-gnueabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc hqyj@ubuntu:~$
07-18
hqyj@ubuntu:~$ pkg -L gcc-arm-linux-gnueabihf 2>/dev/null | grep bin/ hqyj@ubuntu:~$ dpkg -L gcc-arm-linux-gnueabihf 2>/dev/null | grep bin/ hqyj@ubuntu:~$ dpkg -L gcc-arm-none-eabi 2>/dev/null | grep bin/ hqyj@ubuntu:~$ find /opt ~/ /usr/local -name "*-gcc" 2>/dev/null | grep -E "arm|none-eabi" /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/share/gcc-arm-none-eabi/bin/arm-none-eabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/share/gcc-arm-none-eabi/bin/arm-none-eabi-gcc /home/hqyj/Downloads/gcc-4.6.4/bin/arm-linux-gcc /home/hqyj/Downloads/gcc-4.6.4/bin/arm-arm1176jzfssf-linux-gnueabi-gcc /home/hqyj/Downloads/gcc-4.6.4/bin/arm-none-linux-gnueabi-gcc hqyj@ubuntu:~$ which arm-linux-gnueabihf-gcc 2>/dev/null hqyj@ubuntu:~$ which arm-none-eabi-gcc 2>/dev/null hqyj@ubuntu:~$
07-18
<think>我们正在查找系统中已安装的 arm-linux-gnueabihf-gcc 和 arm-none-eabi-gcc 编译器的路径。 根据用户之前执行的命令,我们可以尝试以下方法: 1. 使用 `which` 命令查找(如果已在PATH中): - `which arm-linux-gnueabihf-gcc` - `which arm-none-eabi-gcc` 2. 如果不在PATH中,我们可以使用 `find` 命令在常见安装目录中搜索: - 常见的安装目录包括:`/usr/bin`, `/usr/local/bin`, `/opt`, `~/` (用户主目录) 等。 3. 注意:用户之前执行过 `find /usr/bin /usr/local/bin /opt -name "*-gcc"`,我们可以在此基础上过滤出我们需要的两个编译器。 4. 另外,用户之前还执行了 `find / -path "*/bin/*-linux-*gcc" 2>/dev/null | grep -E "arm|aarch"`,我们也可以参考。 但是,为了避免重复和全面查找,我们将分别搜索两个编译器的名字。 由于用户之前查找的结果中并没有直接出现 `arm-linux-gnueabihf-gcc` 和 `arm-none-eabi-gcc`,所以我们需要更精确的查找。 步骤: 1. 查找 `arm-linux-gnueabihf-gcc`: - 这个编译器通常用于带硬浮点的ARM Linux系统(如Cortex-A系列)。 2. 查找 `arm-none-eabi-gcc`: - 这个编译器通常用于裸机(无操作系统)或RTOS的ARM芯片(如Cortex-M系列)。 执行查找命令(为了避免权限问题,我们忽略权限拒绝的错误,并且只搜索常见目录): 注意:在用户之前的查找结果中,我们看到了很多在 `/opt/st/` 目录下的工具链,以及用户主目录下的 `Downloads/gcc-4.6.4` 目录。但是,我们并没有看到 `arm-linux-gnueabihf-gcc` 和 `arm-none-eabi-gcc` 这两个特定的编译器。 因此,我们需要在系统中进行更广泛的查找,但为了避免长时间搜索,我们可以限制在几个特定目录: 建议搜索的目录: - /usr - /usr/local - /opt - /home (注意:用户主目录可能在/home下) - /snap (如果有snap安装的) 但是,由于整个根目录搜索可能很慢,我们可以先尝试在之前出现过的目录中查找,然后再扩展。 根据用户之前执行的命令,我们注意到在 `/opt/st/` 目录下有一些工具链,但是它们的前缀是 `arm-ostl-` 或 `arm-none-eabi-gcc` 出现在 `/opt/st/stm32mp1/.../usr/share/gcc-arm-none-eabi/bin/arm-none-eabi-gcc` 路径下。所以,我们可以直接检查这个路径是否存在。 另外,用户主目录下的Downloads目录也有一个gcc-4.6.4,但里面是 `arm-linux-gcc` 和 `arm-none-linux-gnueabi-gcc`,并不是我们要的。 因此,我们重点查找: - 对于 `arm-none-eabi-gcc`:在之前的查找结果中已经有一个路径: `/opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/share/gcc-arm-none-eabi/bin/arm-none-eabi-gcc` 以及另一个类似路径在 `/opt/st/fsmp1a/3.1-snapshot/...` 下。 - 对于 `arm-linux-gnueabihf-gcc`:在之前的查找结果中没有直接出现,但是我们可以尝试查找。 由于用户之前没有找到 `arm-linux-gnueabihf-gcc`,我们可能需要安装它,或者用户可能已经安装但不在我们搜索的目录中。 我们可以尝试以下命令: 查找 `arm-linux-gnueabihf-gcc`: ```bash find /usr /opt ~/ -name "arm-linux-gnueabihf-gcc" 2>/dev/null ``` 查找 `arm-none-eabi-gcc`: ```bash find /usr /opt ~/ -name "arm-none-eabi-gcc" 2>/dev/null ``` 但是,由于用户可能没有安装这两个编译器,所以可能找不到。 另外,我们可以通过包管理器来查看是否安装了相应的包: 在Ubuntu中,我们可以通过以下包来安装: - `gcc-arm-linux-gnueabihf` 提供了 `arm-linux-gnueabihf-gcc` - `gcc-arm-none-eabi` 提供了 `arm-none-eabi-gcc` 我们可以使用 `dpkg -L <package-name>` 来查看这些包安装的文件。 但是,用户没有要求安装,只要求查找。 因此,我们首先尝试通过包管理器查找: 1. 检查 `gcc-arm-linux-gnueabihf` 包是否安装: ```bash dpkg -L gcc-arm-linux-gnueabihf 2>/dev/null | grep bin/arm-linux-gnueabihf-gcc ``` 2. 检查 `gcc-arm-none-eabi` 包是否安装: ```bash dpkg -L gcc-arm-none-eabi 2>/dev/null | grep bin/arm-none-eabi-gcc ``` 如果没有找到,则说明可能没有通过包管理器安装。 综合以上,我们给出在用户系统中查找这两个编译器的步骤和可能的结果。</think>### 查找系统中已安装的 ARM 交叉编译工具链路径 #### 一、查找 `arm-linux-gnueabihf-gcc` 路径 1. **通过包管理器定位** ```bash dpkg -L gcc-arm-linux-gnueabihf 2>/dev/null | grep bin/arm-linux-gnueabihf-gcc ``` 典型安装路径:`/usr/bin/arm-linux-gnueabihf-gcc`[^1][^2] 2. **手动搜索系统目录** ```bash find /usr /opt ~/ -name "arm-linux-gnueabihf-gcc" 2>/dev/null ``` 常见位置: - 系统级:`/usr/bin/arm-linux-gnueabihf-gcc` - 手动安装:`/opt/toolchains/gcc-linaro-*/bin/arm-linux-gnueabihf-gcc` - 用户目录:`~/toolchains/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc` --- #### 二、查找 `arm-none-eabi-gcc` 路径 1. **通过包管理器定位** ```bash dpkg -L gcc-arm-none-eabi 2>/dev/null | grep bin/arm-none-eabi-gcc ``` 典型安装路径:`/usr/bin/arm-none-eabi-gcc`[^1][^3] 2. **手动搜索系统目录** ```bash find /usr /opt ~/ -name "arm-none-eabi-gcc" 2>/dev/null ``` 常见位置: - 系统级:`/usr/bin/arm-none-eabi-gcc` - ARM 官方工具链:`/opt/gcc-arm-none-eabi-*/bin/arm-none-eabi-gcc` - STM32 开发包:`/opt/st/stm32*/**/arm-none-eabi-gcc`(如您之前找到的路径) --- #### 三、验证路径有效性 ```bash # 检查编译器是否可用 /usr/bin/arm-linux-gnueabihf-gcc --version /opt/gcc-arm-none-eabi-10.3-2021.07/bin/arm-none-eabi-gcc --version ``` 成功输出应显示版本信息: ``` arm-linux-gnueabihf-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.07) 10.3.1 ``` --- ### 配置建议 1. **添加环境变量** 在 `~/.bashrc` 中添加: ```bash # 针对 ARM Linux 开发 export ARM_LINUX_PATH=/usr/bin export PATH=$PATH:$ARM_LINUX_PATH export CROSS_COMPILE=arm-linux-gnueabihf- # 针对 Cortex-M 开发 export ARM_NONE_PATH=/opt/gcc-arm-none-eabi-10.3-2021.07/bin export PATH=$PATH:$ARM_NONE_PATH export CROSS_COMPILE_M=arm-none-eabi- ``` 生效配置:`source ~/.bashrc` 2. **快速切换工具链** 创建切换脚本 `arm-toolchain.sh`: ```bash #!/bin/bash if [ "$1" = "linux" ]; then export CROSS_COMPILE=arm-linux-gnueabihf- echo "切换到 ARM Linux 工具链" elif [ "$1" = "baremetal" ]; then export CROSS_COMPILE=arm-none-eabi- echo "切换到 Cortex-M 工具链" fi ``` 使用:`source arm-toolchain.sh linux` > **关键提示**: > - `arm-linux-gnueabihf` 适用于带 MMU/浮点单元的 Cortex-A 系列 Linux 系统[^2][^3] > - `arm-none-eabi` 适用于无操作系统的 Cortex-M/R 系列微控制器[^1] > - 通过 `file $(which arm-xxx-gcc)` 可验证二进制文件架构
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒听雪落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值