这里我使用的是:Linux下Clang交叉编译protobuf库供Qt on Android使用


在linux下新建/home/android/目录

下载:protobuf-cpp-3.6.0

网盘链接:https://pan.baidu.com/s/1_RnVcWL0Sw7nmWvl5kTPSgicon-default.png?t=M3K6https://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 icon-default.png?t=M3K6https://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的所以环境配置全部完成

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐