在Ubuntu上安装与配置Protobuf 3.21.1并应用于QT及TQA133开发板
一、在Ubuntu 22.04下安装Protobuf 3.21.1
步骤详情:
-
下载Protobuf:访问 protobuf v21.1 下载对应版本。
-
解压并进入解压后的
protobuf-3.21.1
文件夹。 -
配置安装路径:
./configure --prefix=/home/hm/protobuf3.2.1-lib --libdir=/home/hm/protobuf3.2.1-lib/lib
--prefix
:指定生成文件的路径(包括可执行文件、库文件等)。请将/home/hm
替换为您自己的用户目录。--libdir
:指定库文件的安装路径。同样,请根据需要调整此路径。
-
编译源码:
make -j8
-
执行安装:
sudo make install
-
添加
protoc
到环境变量:
编辑~/.bashrc
文件,并添加以下行:export PATH=/home/hm/protobuf3.2.1-lib/bin:$PATH export LD_LIBRARY_PATH=/home/hm/protobuf3.2.1-lib/lib:$LD_LIBRARY_PATH
然后运行:
source ~/.bashrc
测试安装结果:
protoc --version
注意:请确保将
/home/hm
替换为您的实际路径。即,如果您不是使用hm
作为用户名,请相应地更改这些路径以匹配您计算机上的目录结构。 -
使用
protoc
生成对应的.cc
和.h
文件:protoc --cpp_out=./ hello.proto
--cpp_out=./
:指定输出路径,即生成的C++代码存放的位置。这里的./
表示当前目录。hello.proto
:需要转换的proto文件。protoc
会根据这个文件生成相应的C++代码。- 更多关于
protoc
命令的用法可以参考官方文档。
-
在QT的
.pro
文件中添加库引用。
二、使用TQA133对应的交叉编译工具链编译Protobuf 3.21.1
准备工作与步骤:
-
确保交叉编译工具链已经正确安装。
-
设置环境变量:
export CC=/opt/EmbedSky/TQA133/bin/aarch64-linux-gnu-gcc export CXX=/opt/EmbedSky/TQA133/bin/aarch64-linux-gnu-g++ export AR=/opt/EmbedSky/TQA133/bin/aarch64-linux-gnu-ar export RANLIB=/opt/EmbedSky/TQA133/bin/aarch64-linux-gnu-ranlib
注意:请确保上述路径正确指向您系统中的交叉编译工具链。如果您的交叉编译工具链安装位置不同,请相应地修改这些路径。
-
使用
configure
生成Makefile:./configure --host=aarch64-linux-gnu --prefix=/home/hm/tqa133_protobuf/ --with-protoc=/home/hm/protobuf3.2.1-lib/bin/protoc --libdir=/home/hm/tqa133_protobuf/lib
--host=aarch64-linux-gnu
:指定目标平台为TQA133。--prefix
:指定生成文件的路径。请将/home/hm
替换为您自己的用户目录。--with-protoc
:使用本机的protoc
来生成必要的文件。请确保路径正确指向您主机上的protoc
位置。--libdir
:指定依赖库的位置。请根据需要调整此路径。
-
编译:
make -j8
-
安装:
make install
成功后会生成
bin
,include
, 和lib
文件夹。 -
复制库文件到开发板:
将lib
文件夹中的libprotobuf.so.32.1
和libprotobuf-lite.so.32.1
复制到开发板,并确保路径与QT.pro
文件中的路径一致。 -
创建软链接或使用tar打包整个
lib
并在开发板上解压。 -
检查可执行文件的动态库依赖:
如果遇到找不到环境变量的问题,可以尝试:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hm/tqa133_protobuf/lib
再次运行
ldd 可执行文件
确认是否找到库。
参考资料
- Protocol Buffers官方文档
- 解决Protobuf版本冲突问题:该博客详细描述了如何处理Protobuf版本冲突问题,对我完成这份文档提供了很大帮助。