嵌入式开源库交叉编译整理
本文将不定期更新,主要是整理统计遇到的开源库,交叉编译的方法。
这里的交叉编译平台主要是 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是一个提供字符终端处理库,包括面板和菜单
参考链接:
- https://blog.csdn.net/npy_lp/article/details/7000722
- https://blog.csdn.net/lxh1205509119/article/details/111147007
- https://www.linuxfromscratch.org/lfs/view/development/chapter06/ncurses.html
下载链接如下,选择 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)