Protobuf NDK以及QNX交叉编译

1. 背景

Protobuf  用处很广,尤其是通讯数据序列化,反序列化。

TODO

2. 下载资源

protobuf镜像地址:github-protobuf

Android ndk下载:Android ndk

QNX tools下载: prebuilt_QNX700

下载完,解压!

TODO

3.  实操

废话不多数,直接上编译脚本

3.1  NDK交叉编译脚本

build_android.sh

#!/bin/sh
###################################
#### build script for protobuf
#### taget:qnx
#### Date: 2022-11-01
#### Author: 村里小码农
###################################

# qnx bsp dir
NDKROOT_PATH=/workspace/tools/android-ndk-r23b
TOOLCHAIN=$NDKROOT_PATH/toolchains/llvm/prebuilt/linux-x86_64
# current dir
CURRENT_PATH=$(pwd)
# config Compile param.
TARGET_API=28
#
TARGET_ANDROID_PLATFORM=android-$TARGET_API
#预留
TARGET=aarch64-linux-android
#TARGET_ABI=armeabi-v7a
TARGET_ABI=arm64-v8a

PREFIX=$CURRENT_PATH/build/android/$TARGET_ABI

if [ -d $PREFIX ];then
rm -rf $PREFIX
mkdir -p $PREFIX
else
mkdir -p $PREFIX
fi

if [ ! -f $TOOLCHAIN/bin/$TARGET$TARGET_API-ar ];then
ln -s $TOOLCHAIN/bin/llvm-ar $TOOLCHAIN/bin/$TARGET$TARGET_API-ar
fi

if [ ! -f $TOOLCHAIN/bin/$TARGET$TARGET_API-nm ];then
ln -s $TOOLCHAIN/bin/llvm-nm $TOOLCHAIN/bin/$TARGET$TARGET_API-nm
fi

if [ ! -f $TOOLCHAIN/bin/$TARGET$TARGET_API-ranlib ];then
ln -s $TOOLCHAIN/bin/llvm-ar $TOOLCHAIN/bin/$TARGET$TARGET_API-ranlib
fi

echo "---------------------------"
echo " > start to build ARM64."
echo "---------------------------"

cd $CURRENT_PATH/build/android

cmake -DCMAKE_TOOLCHAIN_FILE=$NDKROOT_PATH/build/cmake/android.toolchain.cmake \
	-DCMAKE_INSTALL_PREFIX=$PREFIX \
	-DANDROID_ABI=$TARGET_ABI \
	-DANDROID_NATIVE_API_LEVEL=$TARGET_API \
	-DCMAKE_BUILD_TYPE=Release\
	-DANDROID_TOOLCHAIN=clang \
	-Dprotobuf_BUILD_TESTS=OFF \
	-Dprotobuf_BUILD_SHARED_LIBS=ON \
	../../cmake/
#-DANDROID_PLATFORM=$TARGET_ANDROID_PLATFORM
#如果编译静态库,则拿掉该项配置
#-Dprotobuf_BUILD_SHARED_LIBS=ON
make
make install

echo "---------------------------"
echo " >   build finished."
echo "---------------------------"
cd $CURRENT_PATH

3.2 QNX交叉编译脚本

build_qnx.sh

#!/bin/sh
###################################
#### build script for protobuf
#### taget:qnx
#### Date: 2022-11-01
#### Author: 村里小码农
###################################

# qnx tools dir
QNX_TOOLS_PATH=/workspace/tools/prebuilt_QNX700
# current dir
CURRENT_PATH=$(pwd)
#
TARGET_ABI=aarch64le
#
PREFIX=$CURRENT_PATH/build/qnx/$TARGET_ABI


if [ -d $PREFIX ];then
rm -rf $PREFIX
mkdir -p $PREFIX
else
mkdir -p $PREFIX
fi

export QNX_CONFIGURATION=$QNX_TOOLS_PATH/.qnx
export QNX_TARGET=$QNX_TOOLS_PATH/target/qnx7
export QNX_HOST=$QNX_TOOLS_PATH/host/linux/x86_64
export MAKEFLAGS=-I$QNX_TOOLS_PATH/target/qnx7/usr/include
export MAKELDFLAGS=-L$QNX_TOOLS_PATH/target/qnx7/usr/lib,-L$QNX_TOOLS_PATH/target/qnx7/aarch64le/lib

#QNX_TOOLCHAINS_CC64=$QNX_TOOLS_PATH/host/linux/x86_64/usr/bin/ntoaarch64-gcc
#QNX_TOOLCHAINS_CXX64=$QNX_TOOLS_PATH/host/linux/x86_64/usr/bin/ntoaarch64-g++
#use aarch64-unknown-nto-qnx7.0.0
QNX_TOOLCHAINS_CC64=$QNX_TOOLS_PATH/host/linux/x86_64/usr/bin/aarch64-unknown-nto-qnx7.0.0-gcc
QNX_TOOLCHAINS_CXX64=$QNX_TOOLS_PATH/host/linux/x86_64/usr/bin/aarch64-unknown-nto-qnx7.0.0-g++

echo "---------------------------"
echo " > start to build ARM64."
echo "---------------------------"
	
./configure --prefix=$PREFIX \
	--host=aarch64-unknown-nto-qnx7.0.0 \
	--build=x86_64-pc-linux \
	CC=$QNX_TOOLCHAINS_CC64 \
	CXX=$QNX_TOOLCHAINS_CXX64 \
	CPPFLAGS='-D_XOPEN_SOURCE=500'
#--disable-shared
	
make -j12
make install

echo "---------------------------"
echo " >   build finished."
echo "---------------------------"

cd $CURRENT_PATH

猜你喜欢

转载自blog.csdn.net/liaochaoyun/article/details/127669185