Freeswitch arm64交叉编译
Freeswitch arm64交叉编译
安装工具
sudo apt update sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
创建工具链文件aarch64-toolchain.cmake
# aarch64-toolchain.cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) # 指定交叉编译器 set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) # 静态库专用设置 set(BUILD_SHARED_LIBS OFF) # 禁用共享库 set(POCO_STATIC ON) # 强制使用静态库 # 查找策略 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # 优化选项(根据目标CPU调整) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -pipe -march=armv8-a")
先编译核心依赖
libks
# 添加多架构支持 sudo dpkg --add-architecture arm64 sudo apt update # 安装 ARM64 版本的依赖库 sudo apt install libuuid1:arm64 uuid-dev:arm64 git clone https://github.com/signalwire/libks.git cd libks mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=../aarch64-toolchain.cmake make && make install
sofia-sip
git clone https://github.com/freeswitch/sofia-sip.git cd sofia-sip ./autogen.sh ./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ make && make install
spandsp
git clone https://github.com/freeswitch/spandsp.git cd spandsp ./autogen.sh ./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ make && make install
编译FreeSWITCH
git clone https://github.com/signalwire/freeswitch.git cd freeswitch export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig git clean -fdx ./bootstrap.sh export ac_cv_func_pthread_rwlock_init=yes export ac_cv_working_alloca_h=yes export ac_cv_func_setpgrp_void=yes export apr_cv_use_lfs64=yes export apr_cv_mutex_robust_shared=yes export apr_cv_process_shared_works=yes export apr_cv_tcp_nodelay_with_cork=yes export ac_cv_sizeof_struct_iovec=8 export apr_cv_mutex_recursive=yes export ac_cv_file__dev_urandom=yes export ac_cv_file__dev_ptmx=yes export ac_cv_file__dev_zero=yes ./configure \ --host=aarch64-linux-gnu \ --build=x86_64-pc-linux-gnu cd libs/libvpx wget -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' wget -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' CC="aarch64-linux-gnu-gcc" CXX="aarch64-linux-gnu-g++" \ CFLAGS="-g -O2 -fvisibility=hidden" CXXFLAGS="-g -O2" LDFLAGS="" \ ./configure \ --target=armv8-linux-gcc \ --enable-pic \ --disable-docs \ --disable-examples \ --disable-install-bins \ --disable-install-srcs \ --disable-unit-tests \ --size-limit=16384x16384 cd ../.. make && make insall
找不到tpl库问题
手动为arm64编译libtpl并放入交叉编译sysroot。
git clone https://github.com/troydhanson/tpl.git cd tpl ./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ AR=aarch64-linux-gnu-ar RANLIB=aarch64-linux-gnu-ranlib make && make install