这里我使用的是:Linux下Clang交叉编译protobuf库供Qt on Android使用
在linux下新建/home/android/目录
下载:protobuf-cpp-3.6.0
网盘链接:https://pan.baidu.com/s/1_RnVcWL0Sw7nmWvl5kTPSghttps://pan.baidu.com/s/1_RnVcWL0Sw7nmWvl5kTPSg
提取码:1111
protobuf-cpp-3.6.0也可以去官网下载,链接:https://github.com/protocolbuffers/protobuf/releases
注意:protobuf的版本不能高,否则编译会失败,建议使用我下的这个版本
cd /home/android/
unzip protobuf-cpp-3.6.0.zip
cd protobuf-3.6.0/
./autogen.sh
./configure --enable-shared --prefix=/home/android/protobuf_linux
make
make install
安装好protobuf-cpp-3.6.0之后,我们还需要android-ndk-r20b-linux-x86_64的来生成Clang编译工具链,可以去官网下载,链接:https://developer.android.google.cn/ndk/downloads/
网盘链接如下:
链接:https://pan.baidu.com/s/1AGo28HRi3N7gZRlMsD_D8Q https://pan.baidu.com/s/1AGo28HRi3N7gZRlMsD_D8Q
提取码:1111
然后在linux与android的同目录下新建一个android_ndk文件夹
上传完后这个文件,解压
unzip android-ndk-r20b-linux-x86_64.zip
解压完成后,进入解压文件的/build/tools目录下
cd ./android-ndk-r20b/build/tools
然后输入以下命令,在/home/android/arm-26-toolchain-clang目录下,生成android-26版本的Clang编译工具链
./make-standalone-toolchain.sh --arch=arm --platform=android-26 --toolchain=arm-linux-android-clang5.0 --install-dir=/home/android/arm-26-toolchain-clang --use-llvm --stl=libc++
成功生成android-26版本的Clang编译工具链
接下来用arm-26-toolchain-clang编译链与刚刚安装的protobuf-cpp-3.6.0交叉编译生成protobuf的动态链接库
编写脚本
vim create_clang_protobuf.sh
脚本内容如下所示
export PREFIX=/home/android/protobuf_arm_3.6.0_clang/
export PATH=/home/android/arm-26-toolchain-clang/bin:$PATH
export SYSROOT=/home/android/arm-26-toolchain-clang/sysroot
export CC="arm-linux-androideabi-clang --sysroot $SYSROOT"
export CXX="arm-linux-androideabi-clang++ --sysroot $SYSROOT"
cd /home/android/protobuf-3.6.0
make clean
./autogen.sh
./configure --prefix=$PREFIX \
--host=arm-linux-androideabi \
--with-sysroot="${SYSROOT}" \
--enable-shared \
--enable-cross-compile \
--with-protoc=/home/android/protobuf_linux/bin/protoc \
CFLAGS="-march=armv7-a -D__ANDROID_API__=26" \
CXXFLAGS="-frtti -fexceptions -march=armv7-a -D__ANDROID_API__=26" \
LIBS="-llog -lz -lc++_static"
make
make install
然后运行脚本,自动完成交叉编译生成protobuf供qt for android使用
sh vim create_clang_protobuf.sh
生成需要一段时间,耐心等待
如下说明生成成功!
protobuf交叉编译已经完成
接下来生成bike.pb.h和bike.pb.cc文件供qt使用
切换到protobuf_linux/bin目录下,现在只有一个proto文件
现在上传共享单车开发文档及附件下的bike.proto文件到这个目录中
接下来编译,输入命令:./protoc -I=./ --cpp_out=./ bike.proto
就会在同级目录中生成bike.pb.h和bike.pb.cc的文件
然后在把生成的protobuf_arm_3.6.0_clang文件和刚刚生成的bike.pb.h和bike.pb.cc文件下载到windows下的文件夹中,我下载到的文件是:E:\QtShareBikeProject
接着进入protobuf_arm_3.6.0_clang的lib目录下,找到以下文件
把这些文件下后缀so后的后缀全部删掉,只留下.so的后缀
然后我们在qt上新建一个Qt Quick Application-Empty项目
接下复制bike.pb.h和bike.pb.cc文件到目录下,然后添加到项目中
接着编译,发现报错
接着进行android项目配置和库配置,如下所示
库路径包含后,包含路径会自动识别,不用在手动包含,最后点击下一步完成即可
然后点击.pro文件,看到多了如下配置和文件Other files
接下来编译共享单车工程,如下所示,编译成功,那些警告不用理会
到这里protobuf的所以环境配置全部完成