声明
仅供参考,编译步骤或参数不一定还是正确的
Env 1 2 3 export PATH=$PATH:$HOME/sysroots/x86_64-linux/usr/bin/arm-oe-linux-gnueabi export SYSROOT_PATH=$HOME/sysroots/mdm9607 export PREFIX=$SYSROOT_PATH/usr
nghttp2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cd ~/avs-device-sdk/ThirdParty/ git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp2/ autoreconf -i automake autoconf ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CFLAGS="--sysroot=$SYSROOT_PATH" \ CXXFLAGS="--sysroot=$SYSROOT_PATH" make && make install
libcurl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 cd ~/avs-device-sdk/ThirdParty wget http://curl.haxx.se/download/curl-7.54.0.tar.bz2 tar xf curl-7.54.0.tar.bz2 cd curl-7.54.0/ # 这里的 --with-nghttp2 指向 nghttp2 的安装路径, 参考上面编译 nghttp2 的 --prefix ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CFLAGS="--sysroot=$SYSROOT_PATH" \ --with-nghttp2=$PREFIX \ --with-ssl make && make install
OpenSSL 1 2 3 4 5 6 7 8 9 10 11 wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1b.tar.gz ./Configure \ linux-generic32 \ shared \ --prefix=$PREFIX \ --openssldir=$SYSROOT_PATH/usr/include/openssl \ --cross-compile-prefix=$SYSROOT_PATH/../x86_64-linux/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi- \ --sysroot=$SYSROOT_PATH make && make install
Doxygen 需要cmake 3.8+
可手动下载编译即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 git clone https://github.com/doxygen/doxygen.git cd doxygen mkdir build cd build cmake \ -DCMAKE_C_COMPILER=arm-oe-linux-gnueabi-gcc \ -DCMAKE_CXX_COMPILER=arm-oe-linux-gnueabi-g++ \ -DCMAKE_SYSROOT=$SYSROOT_PATH \ -DCMAKE_INSTALL_PREFIX=$PREFIX \ .. make && make install
libsoup 依赖 icu4c
& libpsl
& krb5
icu4c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 cd ~/avs-device-sdk/ThirdParty wget http://download.icu-project.org/files/icu4c/63.1/icu4c-63_1-src.tgz tar xf icu4c-63_1-src.tgz # 解压两份分别为 icu_prebuild icu_realbuild cp -rf icu icu_prebuild mv icu icu_realbuild cd icu_prebuild/source ./configure make # 生成 config/icucross.mk 文件, 不用 make install 了 cd icu_realbuild/source ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CFLAGS="--sysroot=$SYSROOT_PATH" \ CXXFLAGS="--sysroot=$SYSROOT_PATH" \ --with-cross-build=$HOME/avs-device-sdk/ThirdParty/icu_prebuild/source make && make install
libpsl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sudo apt install autopoint cd ~/avs-device-sdk/ThirdParty git clone https://github.com/rockdaboot/libpsl cd libpsl/ ./autogen.sh ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CFLAGS="--sysroot=$SYSROOT_PATH" \ CXXFLAGS="--sysroot=$SYSROOT_PATH" make && make install
krb5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 cd ~/avs-device-sdk/ThirdParty wget https://kerberos.org/dist/krb5/1.15/krb5-1.15.1.tar.gz tar xf krb5-1.15.1.tar.gz cd krb5-1.15.1/src echo krb5_cv_attr_constructor_destructor=yes > linux-cache echo ac_cv_func_regcomp=yes >> linux-cache echo ac_cv_printf_positional=yes >> linux-cache ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CC="arm-oe-linux-gnueabi-gcc -I$SYSROOT_PATH/usr/include --sysroot=$SYSROOT_PATH -L$SYSROOT_PATH/usr/lib" \ CXX="arm-oe-linux-gnueabi-g++ -I$SYSROOT_PATH/usr/include --sysroot=$SYSROOT_PATH -L$SYSROOT_PATH/usr/lib" \ --cache-file=linux-cache 需要修改下 include/k5-platform.h 哪里报错则注释掉哪里,比如 注释 # define MAKE_FINI_FUNCTION(NAME) \ static void NAME(void) __attribute__((destructor)) 注释 # error "Don't know how to do unload-time finalization for this configuration." make && make install
libsoup 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cd ~/avs-device-sdk/ThirdParty sudo apt install intltool gtk-doc-tools sqlite3 libsqlite3-dev glib-networking libglib2.0 libxml2-dev wget https://ftp.gnome.org/pub/GNOME/sources/libsoup/2.65/libsoup-2.65.1.tar.xz tar xf libsoup-2.65.1.tar.xz cd libsoup-2.65.1 # 这里注意不要加 PKG_CONFIG_PATH 变量或者环境变量, 否则 make 报错 ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ --with-sysroot=$SYSROOT_PATH \ CFLAGS="--sysroot=$SYSROOT_PATH" \ CXXFLAGS="--sysroot=$SYSROOT_PATH" \ LDFLAGS="-L$SYSROOT_PATH/usr/lib" \ --disable-tls-check make && make install
libfaad-dev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cd ~/avs-device-sdk/ThirdParty git clone https://github.com/dsvensson/faad2.git cd faad2/ git checkout xmms2 ./bootstrap ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CFLAGS="--sysroot=$SYSROOT_PATH" make && make install
GStreamer 依赖 libffi
编译了 GStreamer
之后还需要编译 gst-plugins-base
& gst-plugins-bad
等插件,目前未编译成功
libffi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cd ~/avs-device-sdk/ThirdParty wget https://github.com/libffi/libffi/archive/v3.2.1.tar.gz tar xf v3.2.1.tar.gz cd libffi-3.2.1/ ./autogen.sh ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CFLAGS="--sysroot=$SYSROOT_PATH" make && make install
GStreamer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cd ~/avs-device-sdk/ThirdParty wget https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.15.2.tar.xz tar xf gstreamer-1.15.2.tar.xz cd gstreamer-1.15.2 ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ --with-sysroot=$SYSROOT_PATH \ CFLAGS="--sysroot=$SYSROOT_PATH" \ LDFLAGS="-L$SYSROOT_PATH/lib -L$SYSROOT_PATH/usr/lib" \ GLIB_CFLAGS="-I$SYSROOT_PATH/usr/include/glib-2.0 -I$SYSROOT_PATH/usr/lib/glib-2.0/include" \ GIO_CFLAGS="-I$SYSROOT_PATH/usr/include" # configure 阶段不要添加 GLIB_LIBS/GIO_LIBS 不然导致 make 阶段编译不过 # GLIB_LIBS="-L$SYSROOT_PATH/usr/lib" # GIO_LIBS="-L$SYSROOT_PATH/usr/lib" make && make install
PortAudio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cd ~/avs-device-sdk/ThirdParty wget http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz tar xf pa_stable_v190600_20161030.tgz cd portaudio ./configure \ --prefix=$PREFIX \ --host=arm-oe-linux-gnueabi \ CC="arm-oe-linux-gnueabi-gcc --sysroot=$SYSROOT_PATH" \ CXX="arm-oe-linux-gnueabi-g++ --sysroot=$SYSROOT_PATH" \ --without-jack make && make install
avs-device-sdk 1 2 # 这句要指向正确实际的 gstreamer-1.0.pc 文件路径 export PKG_CONFIG_PATH=$SYSROOT_PATH/usr/lib/pkgconfig/
vi ~/avs-device-sdk/CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 diff --git a/CMakeLists.txt b/CMakeLists.txt index cb557d1cb..129b1b0a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,18 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR) # Set project information project(AlexaClientSDK VERSION 1.12.0 LANGUAGES CXX) + +include_directories( + "$HOME/sysroots/mdm9607/include" + "$HOME/sysroots/mdm9607/usr/include" + "$HOME/sysroots/mdm9607/usr/include/gstreamer-1.0" + "$HOME/sysroots/mdm9607/usr/include/glib-2.0" + "$HOME/sysroots/mdm9607/usr/lib/glib-2.0/include" +) +link_directories("$HOME/sysroots/mdm9607/lib" "$HOME/sysroots/mdm9607/usr/lib") + +set(CMAKE_SYSROOT "$HOME/sysroots/mdm9607") + set(PROJECT_BRIEF "A cross-platform, modular SDK for interacting with the Alexa Voice Service") if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CapabilityAgents/ExternalMediaPlayer/src/ExternalMediaPlayerAdapters") set(HAS_EXTERNAL_MEDIA_PLAYER_ADAPTERS ON)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 mkdir $HOME/avs_build cd $HOME/avs_build cmake $HOME/avs-device-sdk \ -DSENSORY_KEY_WORD_DETECTOR=OFF \ -DGSTREAMER_MEDIA_PLAYER=ON \ -DPORTAUDIO=ON \ -DPORTAUDIO_LIB_PATH=$SYSROOT_PATH/lib/libportaudio.a \ -DPORTAUDIO_INCLUDE_DIR=$SYSROOT_PATH/include \ -DCMAKE_C_COMPILER=arm-oe-linux-gnueabi-gcc \ -DCMAKE_CXX_COMPILER=arm-oe-linux-gnueabi-g++ \ -DCMAKE_SYSROOT=$SYSROOT_PATH \ -DCMAKE_FIND_ROOT_PATH=$SYSROOT_PATH \ -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ -DCMAKE_BUILD_TYPE=DEBUG make