编译器安装
需要准备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’的错误