toolchain编译工具链的安装和使用

文章讲述了在Ubuntu环境下,如何安装和使用特定的toolchain进行aarch64平台的交叉编译。通过source环境变量或修改Makefile指定编译器路径来确保使用正确的编译工具。遇到RelocationsingenericELF(EM:62)错误时,需清理并重新编译。当遇到undefinedreferenceto`pthread_create`问题时,需要添加-lpthread链接选项来解决。

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

编译器安装

需要准备toolchain压缩包,解压后进入文件夹内,运行sh文件安装,全部选默认,默认安装的路径是/opt/fsl-imx-wayland/4.14-sumo/,数字代表版本。

指定编译器编译

指定编译器有两种方法

source方式

在正式使用该编译工具链之前,只需要通过下面命令设置环境变量即可。

source /opt/fsl-imx-wayland/4.14-sumo/environment-setup-aarch64-poky-linux

现在,你可以在终端命令行中找到许多以 aarch64-poky-linux- 为前缀的工具,例如 aarch64-poky-linux-gcc、aarch64-poky-linux-g++、aarch64-poky-linux-gdb 等等。

指定路径方式

在Makefile文件中指定编译工具链,路径就是安装的路径,$(CC)就是使用编译器了

TOOLCHAIN_INSTALL_DIR = /opt/fsl-imx-wayland/4.14-sumo/sysroots
CROSS_COMPILE_PREFIX = ${TOOLCHAIN_INSTALL_DIR}/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-
CC = ${CROSS_COMPILE_PREFIX}gcc
CC += --sysroot=${TOOLCHAIN_INSTALL_DIR}/aarch64-poky-linux

PTHREAD_LIBS += -lpthread
CFLAGS += -O2
CFLAGS += -Wall
LDFLAGS = $(PTHREAD_LIBS)

	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

问题总结

未使用指定编译器

开始直接使用默认的gcc编译,编译出来的文件是x86平台,非arm平台的,因此需要使用指定编译器,查看编译出来的应用使用命令file xxx或objdump -a xxx查看文件属性。

未使用配置环境编译

安装编译器后需要手动source后再进行编译,不然还是默认使用gcc编译出x86平台应用。

编译报错Relocations in generic ELF (EM: 62)

是因为编译工具链路径和上一次不一致问题,make clean多次清理后,再编译即可。

编译报错undefined reference to `pthread_create’

是说pthread不是Linux下的默认的库,在链接的时候,无法找到phread库中函数的入口地址,于是链接会失败。所以在gcc编译的时候,附加要加 -lpthread 参数即可解决。
注意: ubuntu x86平台应用必须把-pthread放在后面,因为是编译到arm平台,所以使用的是-lpthread,位置在前面也可以

make编译出错Relocations in generic ELF (EM: 62)
安装工具链
解决Ubuntu gcc编译线程创建函数pthread_create()出现 undefined reference to `pthread_create’的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值