若该文为原创文章,转载请注明原文出处。
最近小智AI火了,韦老师出了 Linux 小智 AI 聊天机器人 版本,想移植到 RK3568上,
由于和韦老师硬件不同,所以需要交叉编译一些库,为后续移植做准备。
一、环境
1、硬件: 正点原子ATK-DLRK3568
2、环境:buildroot
3、虚拟机:正点原子自带
二、源码
100askTeam/xiaozhi-linux: Embedded Linux AI Xiaozhi Intelligent voice dialogue.
根据源码,需要编译的库有:speexdsp, websocketpp, boost, curl, opensll,opus等。
三、交叉编译
1、speexdsp编译
1)、下载代码
https://www.speex.org/downloads/
2)、编译
tar xvf speexdsp-1.2.1.tar.gz
cd speexdsp-1.2.1/
export CC=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-gcc
./configure --prefix=/opt/arm_libspeexdsp --host=arm-linux --disable-oggtest
make
sudo make install
为了方便,所以编译出来的include和lib文件全部拷贝到工具链下,不用在指定include和lib位置
2、boost编译
使用websocketpp此库需要使用boost库进行编译
编译参考:websocketpp的使用和boost库的交叉编译_websocke交叉编译-CSDN博客
cd boost_1_73_0
export CC=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-gcc
./bootstrap.sh --show-libraries //查看当前boost库中已经包含的库
/bootstrap.sh --prefix=/opt/lib_boost # 使用此命令可以指定boost库的安装如果不使用默认路径是/usr/local/include 和 /usr/local/lib,分别存放头文件和各种库
# 需要修改文件“project-config.jam”
找到并修改:
if ! gcc in [ feature.values <toolset> ]
{
using gcc : : /opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-g++ ;
}
./b2
./b2 install
编译会出错,但库有编译出来,同样把include和lib拷贝到atk-dlrk356x-toolchain的对应目录下
3、libopenssl编译
网上直接下载源码
编译过程:
export CC=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-gcc
./config no-asm -shared --prefix=/opt/arm_openssl
make
sudo make install
出错: arm-linux-gnueabihf-gcc: error: unrecognized command line option '-m64 ”-m64“错误,原因是虚拟机是64位,要编译的是32位。 处理: 进入makefile,删除文件里所有-m64,在重新编译。 为什么要编译ssl,编译srt时需要用到 。
4、curl编译
cd curl-7.85.0
CPPFLAGS="-I/opt/arm_openssl/include" \
LDFLAGS="-L/opt/arm_openssl/lib" \
LIBS="-ldl" \
./configure --host=arm-linux \
CC=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-gcc \
CXX=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-g++ \
--with-ssl \
--enable-shared \
--enable-static \
--disable-dict \
--disable-ftp \
--disable-imap \
--disable-ldap \
--disable-ldaps \
--disable-pop3 \
--disable-proxy \
--disable-rtsp \
--disable-smtp \
--disable-telnet \
--disable-tftp \
--disable-zlib \
--without-ca-bundle \
--without-gnutls \
--without-libidn \
--without-librtmp \
--without-libssh2 \
--without-nss \
--prefix=/opt/arm_libcurl
make
sudo make install
5、文件拷贝
把编译后的include和lib拷贝到atk-dlrk356x-toolchain的对应目录下
/opt/atk-dlrk356x-toolchain/aarch64-buildroot-linux-gnu/sysroot/usr/include
/opt/atk-dlrk356x-toolchain/aarch64-buildroot-linux-gnu/sysroot/usr/lib
6、websocketapp库
下载https://github.com/zaphoyd/websocketpp
下载后,把websocketpp目录下的文件全部拷贝到/opt/atk-dlrk356x-toolchain/aarch64-buildroot-linux-gnu/sysroot/usr/include
对接WebSocket时会用到。
至此,所有的库都编译完成了,接下来是编译xiaozhi-linux源码和测试。
移植编译过程中还用到了opus库,但在工具链里已经有了库文件,所以没重新交叉编译。
把编译好的库也需要拷贝到开发板上。
如有侵权,或需要完整代码,请及时联系博。