以前的版本中,有./configure,所以参照下面的博客链接
Ubuntu安装Protobuf,指定版本_ubuntu更新protobuf-CSDN博客
后来的版本中,没有了./configure文件,需要安装bazel,参照下面的官网链接
protobuf/src/README.md at main · protocolbuffers/protobuf · GitHub
执行下面命令
bazel build :protoc :protobuf
cp bazel-bin/protoc /usr/local/bin
这样Protobuf就安装成功了
2024.06.07
上面的这个步骤可以用命令(protoc --version)显示出,protoc的版本,但好像并没有编译,导致在arm版本的tensorflow lite 库编译时频繁出现以下错误
把protobuf/src/google/protobuf文件夹拷贝到usr/local/include/google下面,又会出现连锁问题,如在runtime_verison.h文件中找不到一些文件。
基于以上问题,猜想是不是需要指定一个环境变量或者说安装一个google 的什么库,来解决这样的一个连锁的问题。搜索到一下issue
猜想可能是我没有编译,导致出现了连锁问题,于是百度搜索protobuf编译,搜到下面一个博客
Hello! protobuf------编译与安装(c++版)_protobuf编译安装-CSDN博客
执行到cmake -G的时候执行不了,然后用百度AI的方法执行成功了
执行cmake -G "Unix Makefiles"
执行cmake --build.
执行sudo make install
然后我再看usr/local/include/google下的protobuf文件夹,确实发生了更新
可能这次应该在编译protobuf的相关文件时,不会再出现问题。
这次成功了,中间也没有再次报错。
以前的错误类型
1、
加上-DABSL_PROPAGATE_CXX_STD=ON
2、
"aarch64-oe" is not supported in cpuinfo.
通过搜索处理器架构的一些知识
----------处理器架构的一些知识------------------
X86和ARM是两种主要的CPU架构,而X86架构的CPU是PC服务器行业的老大,ARM架构的CPU则是移动端的老大。
x64,也被称为 AMD64 或 Intel 64,是对经典的 32 位 x86 指令集架构(ISA)的扩展。这种架构最初由 AMD 开发,并迅速被 Intel 采纳,其主要目的是允许计算机处理更大的内存空间(超过 4GB),同时保持对旧 x86 应用程序的兼容性。x64 架构支持的是 64 位计算,这意味着它可以使用更宽的数据通道和更大的寄存器,这对于提高数据处理能力和运行复杂的应用程序非常重要。
arm64,亦称为 AArch64,是 ARM 架构的 64 位版本,由 ARM Holdings 设计。它用于 ARM 的 v8-A 架构中,标志着从 32 位转向 64 位处理能力的重大转变。arm64 架构特别注重能效比,这使得它在移动设备、嵌入式系统以及越来越多的服务器和桌面平台上变得非常受欢迎。与 x64 相比,arm64 提供了更高的能源效率和成本效益,部分原因是其精简指令集(RISC),这种设计减少了每条指令的复杂度,使得硬件实现更为简单。
https://zhuanlan.zhihu.com/p/658199487
arm vs AArch64 vs amd64 vs x86_64 vs x86:有什么区别?
AArch64和ARM64都是指同一个处理器架构,只是名称不同,来源也不同。
AMD64和x86_64基本上是同一个东西。
通过对处理器架构知识的搜索了解,我觉得aarch64-oe可能是aarch64的一个变种,但是最终规则还是得按照aarch64来。
基于上述判断,把/home/user/build_tflite_cc/cpuinfo/CMakeLists.txt中所有的aarch64的地方,都添加|aarch64-oe,目的是把aarch64-oe让编译器识别成aarch64进行编译。
这样操作后,先cmake.....,后make -j8,成功生成了libtensorflow-lite.so文件,但是在make的71%处出现了一个错误。
这上面的意思是说protobuf的版本低,更新版本后
始终会在编译百分之六七十的地方出现错误。有的时候,可以make -j8到100%,但是也是有错误的,如下:
有的时候可以生成libtensorflow-lite.so,但也是有错误的。
一些思考:
1、上面编译的libtensorflow-lite.so是错误的,下面图示是正确的文件
从上面可以看出,libtensorflow-lite.so的文件大小确实有差异,不成功的时候libtensorflow-lite.so的大小是109791k,成功的时候libtensorflow-lite.so的大小是160679k,生成成功时libtensorflow-lite.so的文件大小比不成功时大。
2、protoc的版本问题
我安装protoc的时候,版本是libprotoc 27.0-dev
我编译之后就变成了,libprotoc 3.21.9,这个还不知道为啥
3、编译tensorflow lite 库时,编译protobuf库之后,一些提示信息消失了
在没有编译protobuf库之前,编译tensorflow lite 库,还会出现上面一些白色字体的提醒,但是编译protobuf库之后,一些白色字体的提醒就没有了,如下图