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 

 

posted @ 2025-10-13 10:14  钟齐峰  阅读(8)  评论(0)    收藏  举报