【分享】MPSoC交叉编译例子
时间:2022-07-28
本文章向大家介绍【分享】MPSoC交叉编译例子,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 介绍
有工程师反馈,使用A53交叉编译器直接编译最简单的C文件,编译器也报告。"stdio.h: No such file or directory"
aarch64-xilinx-linux-gcc -c hello.c -DPLATFORM_ZCU106 -std=c11 -o hello.o
hello.c:3:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
2. sysroot
GCC编译代码时,缺省是在目录/usr/include查找头文件,在目录/usr/lib查找库文件。如果是交叉编译,就不能在主机的目录下查找头文件和库文件,因为它们包含的是主机的应用程序的文件。我们需要指定目标单板的头文件和库文件。对于这种需求,GCC使用选项sysroot来实现。
GCC文档关于sysroot的描述如下:
--sysroot=dir
Use dir as the logical root directory for headers and libraries. For example,
if the compiler normally searches for headers in /usr/include and libraries
in /usr/lib, it instead searches dir/usr/include and dir/usr/lib.
If you use both this option and the -isysroot option, then the --sysroot option
applies to libraries, but the -isysroot option applies to header files.
The GNU linker (beginning with version 2.16) has the necessary support for this
option. If your linker does not support this option, the header file aspect of
--sysroot still works, but the library aspect does not.
3. 使用sysroot的编译
使用sysroot指定目录后,编译文件成功,没有任何问题。
aarch64-xilinx-linux-gcc --sysroot=/opt/petalinux/2019.2/sysroots/aarch64-xilinx-linux -c hello.c -DPLATFORM_ZCU106 -std=c11 -o hello.o
aarch64-xilinx-linux-gcc --sysroot=/opt/petalinux/2019.2/sysroots/aarch64-xilinx-linux -o hello hello.o -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed `pkg-config --cflags --libs glib-2.0 gstreamer-1.0 gstreamer-app-1.0` -lpthread -ldl -lrt -Wl,-rpath-link, -Wl,-O1 -Wl,--hash-style=gnu -Wl,--allow-multiple-definition
4. Makefile
在命令行下指定sysroot目录,只能适用于非常简单的代码。对于应用程序的开发,建议使用Makefile。下面提供一个Makefile的例子。
#source "$dir_build/environment-setup-aarch64-xilinx-linux"
PLNX_AARCH_PATH=/opt/petalinux/2019.2/sysroots/aarch64-xilinx-linux
WARNING_CFLAGS = -Wall
CC = aarch64-xilinx-linux-gcc --sysroot=$(PLNX_AARCH_PATH)
export PKG_CONFIG_PATH=$(PLNX_AARCH_PATH)/usr/lib/pkgconfig/
LDFLAGS += -lpthread -ldl -lrt -Wl,-rpath-link, -Wl,-O1 -Wl,--hash-style=gnu
SOURCES = $(wildcard *.c)
OBJECTS = $(patsubst %.c,%.o,$(SOURCES))
CFLAGS = -DPLATFORM_ZCU106 -std=c11
all: hello
hello: hello.o
$(CC) -o $@ hello.o $(LDFLAGS)
%.o: %.c
$(CC) -c $< $(CFLAGS) -o $@
clean:
rm -f $(wildcard *.o) hello
5. 得到sysroot和交叉编译器
在petalinux工程中,执行petalinux-build –sdk,编译完成后能得到sdk.sh。 安装sdk.sh,后得到文件environment-setup-aarch64-xilinx-linux。执行source environment-setup-aarch64-xilinx-linux,配置好交叉编译器的路径。 在Makefile里,设置sysroot为其中的sysroots/aarch64-xilinx-linux/,GCC就能找到正确的头文件和库文件。
hankf@xszgs4:/opt/petalinux/2019.2$ ls -l
total 28
-rw-r--r-- 1 root root 3502 Jan 17 2020 environment-setup-aarch64-xilinx-linux
-rw-r--r-- 1 root root 13970 Jan 17 2020 site-config-aarch64-xilinx-linux
drwxr-xr-x 4 root root 4096 Oct 5 2019 sysroots
-rw-r--r-- 1 root root 96 Jan 17 2020 version-aarch64-xilinx-linux
hankf@xszgs4:/opt/petalinux/2019.2$ ls -l sysroots/aarch64-xilinx-linux/
total 60
drwxr-xr-x 3 xilinx root 4096 Jan 13 2020 bin
drwxr-xr-x 2 xilinx root 4096 Jan 13 2020 boot
drwxr-xr-x 2 xilinx root 4096 Jan 13 2020 dev
drwxr-xr-x 46 xilinx root 4096 Jan 13 2020 etc
drwxr-xr-x 3 xilinx root 4096 Jan 13 2020 home
drwxr-xr-x 9 xilinx root 4096 Oct 5 2019 lib
drwxr-xr-x 2 xilinx root 4096 Jan 13 2020 media
drwxr-xr-x 2 xilinx root 4096 Jan 13 2020 mnt
dr-xr-xr-x 2 xilinx root 4096 Jan 13 2020 proc
drwxr-xr-x 2 xilinx root 4096 Jan 13 2020 run
drwxr-xr-x 3 xilinx root 4096 Jan 13 2020 sbin
dr-xr-xr-x 2 xilinx root 4096 Jan 13 2020 sys
drwxrwxrwt 2 xilinx root 4096 Jan 13 2020 tmp
drwxr-xr-x 10 xilinx root 4096 Oct 5 2019 usr
drwxr-xr-x 9 xilinx root 4096 Oct 5 2019 var
hankf@xszgs4:/opt/petalinux/2019.2$ source environment-setup-aarch64-xilinx-linux
hankf@xszgs4:/opt/petalinux/2019.2$ aarch64-xilinx-linux-gcc --version
aarch64-xilinx-linux-gcc (GCC) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
hankf@xszgs4:/opt/petalinux/2019.2$ which aarch64-xilinx-linux-gcc
/opt/petalinux/2019.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gcc
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在tinycolinux上编译seafile
- Alink漫谈(二十一) :回归评估之源码分析
- Linux环境下通过GDB调试C项目实战
- Alink漫谈(二十二) :源码分析之聚类评估
- Python3.x将代码打包成exe程序并添加图标
- 在tinycolinux上编译pypy和hippyvm
- IDEA 热部署配置 HotSwapAgent-IntelliJ-IDEA-plugin
- 在tinycolinux上编译odoo8
- 在tinycolinux上编译jupyter和rootcling组建混合cpp,python学习环境
- 110分钟使用Python搭建自己的IP定位查询接口
- python实现在线微博数据可视化
- 在tinycolinux上安装chrome
- 如何在Ubuntu 18.04服务器上安装Python 3和设置编程环境
- python趣味题-数字加密
- 快手解析视频真实链接(爬取快手视频)