若該文為原創文章,轉載請注明原文出處。
最近小智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.gzcd 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.0CPPFLAGS="-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_libcurlmake 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庫,但在工具鏈里已經有了庫文件,所以沒重新交叉編譯。
把編譯好的庫也需要拷貝到開發板上。
如有侵權,或需要完整代碼,請及時聯系博。