嵌入式开源库交叉编译整理

本文将不定期更新,主要是整理统计遇到的开源库,交叉编译的方法。
这里的交叉编译平台主要是 ARM32 的芯片平台。

首先在交叉编译目录上一层创建文件夹,方便后续开源库的依赖和链接
mkdir ../rv1126
这里我使用的是,rv1126 的平台,因此创建了一个 rv1126的目录。后续所有开源库的编译,输出路径全都放在这里

USB 相关

eudev 交叉编译

参考链接: https://www.cnblogs.com/erhu-67786482/p/10894727.html
下载地址如下,选择 eudev-3.2.5 版本
https://dev.gentoo.org/~blueness/eudev
交叉编译添加 --disable-kmod disable-blkid 选项
交叉编译:

./configure --host=arm-linux --prefix=`pwd`/../rv1126 CFLAGS=-I`pwd`/../rv1126/include/  LDFLAGS=-L`pwd`/../rv1126/lib/ CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --disable-kmod --disable-blkid

make
make install

libusb 交叉编译

参考链接: https://www.cnblogs.com/erhu-67786482/p/10894727.html
libusb 库依赖于 libudev库,请先编译 eudev 库
下载链接如下,选择libusb-1.0.26版本
https://github.com/libusb/libusb-compat-0.1/releases
交叉编译:

./configure --host=arm-linux --prefix=`pwd`/../rv1126 CFLAGS=-I`pwd`/../rv1126/include/  LDFLAGS=-L`pwd`/../rv1126/lib/ CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ 
make
make install

usbutils 交叉编译(编译lsusb等工具)

参考链接:https://blog.csdn.net/vertor11/article/details/71482382
usbtutils 依赖于 libusb 和 eudev 库,请先编译这两个库
下载链接如下,选择 usbtuils-012 版本
https://src.fedoraproject.org/repo/pkgs/usbutils/
交叉编译:

./autogen.sh
./configure --host=arm-linux --prefix=`pwd`/../rv1126 CFLAGS=-I`pwd`/../rv1126/include/  LDFLAGS=-L`pwd`/../rv1126/lib/ CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ 
make 
make install

编译和安装成功后,就能在 rv1126/bin/ 下面找到 lsusb 工具了

调试相关

libncureses 交叉编译

Ncurses是一个提供字符终端处理库,包括面板和菜单
参考链接:

下载链接如下,选择 ncurses-6.2 的版本
http://ftp.gnu.org/pub/gnu/ncurses/
交叉编译,ncurses 的编译相对比较复杂,需要编译宿主机和嵌入式平台两部分。调试了好久😂

# 编译宿主机
mkdir ./build
cd ./build
./configure 
make
######################################

#编译嵌入式平台
./configure --host=arm-linux --prefix=`readlink -f ../rv1126` CFLAGS=-I`readlink -f ../rv1126/include/`  LDFLAGS=-L`readlink -f ../rv1126/lib/` --mandir=`readlink -f ../rv1126/man/` CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++  STRIP=arm-linux-gnueabihf-strip --with-manpage-format=normal --enable-wide --without-debug --without-ada --without-normal --disable-stripping --with-shared 

make 
make TIC_PATH=`readlink -f build/progs/tic` install

gdb 交叉编译

参考链接

先安装texinfo工具

apt-get install texinfo

下载链接如下,选择 gdb-7.12 的版本
http://ftp.gnu.org/gnu/gdb/
交叉编译

# 注意如果 configure 配置出错,最好删掉文件夹重新解压
# 因为 ./configure 脚本覆盖原来的配置可能会出现问题
./configure --host=arm-linux --prefix=`readlink -f ../rv1126` CFLAGS="-I`readlink -f ../rv1126/include/`"  CPPFLAGS="-I`readlink -f ../rv1126/include/`" LDFLAGS="-I`readlink -f ../rv1126/lib/`" CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ LD=arm-linux-gnueabihf-ld AR=arm-linux-gnueabihf-ar 

# 很奇怪,明明指定了头文件路径,编译的时候却没有放进去。就手动增加了软连接
ln -s ../rv1126/include/ncurses ./
make
make install

编译的时候可能会出现以下错误

location.c:527:19: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
       || *argp == '\0'
# 估计是编译器比较新,gdb的代码不支持相应的ISO标准
# 将 || *argp == '\0'  修改为  || *argp == NULL
posted @   infinite_ryvius  阅读(391)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示