- gPRC 介绍
- gPRC 介绍 - 资料收集整理
- gPRC 介绍 - Protocol Buffer 3
- gPRC文档
- gPRC文档 - gRPC官方文档(中文版)
- gPRC文档 - gRPC动机和设计原则
- gPRC文档 - 源码导航
- 基础 - NameResolver
- NameResolver - URI术语
- NameResolver - 类NameResolver
- NameResolver - 类DnsNameResolver
- NameResolver - 类DirectAddressNameResolver
- NameResolver - NameResolver的用法
- 基础 - Metadata
- Channel层
- Channel设计与代码实现 - 类Channel
- Channel设计与代码实现 - 类ManagedChannel
- 类ManagedChannelImpl - 空闲模式
- 类ManagedChannelImpl - InUseStateAggregator
- 类ManagedChannelImpl - Name Resolver
- 类ManagedChannelImpl - Load Balancer
- 类ManagedChannelImpl - Transport
- 类ManagedChannelImpl - Executor
- 类ManagedChannelImpl - 关闭
- Channel层 - Channel Builder设计与代码实现
- Channel Builder设计与代码实现 - 类ManagedChannelBuilder
- Channel Builder设计与代码实现 - 类AbstractManagedChannelImplBuilder
- Channel Builder设计与代码实现 - 类NettyChannelBuilder
- Channel层 - Channel Provider设计与代码实现
- Channel Provider设计与代码实现 - 类ManagedChannelProvider
- Channel Provider设计与代码实现 - 类NettyChannelProvider
- Channel层 - 类CallOptions
- Stub层 - 类DemoServiceBlockingStub
- Stub层 - 类AbstractStub
- 客户端流程
- 状态 - 类Status
- 状态 - 状态码详细定义
- 状态 - 类StatusException
- 状态 - 异常处理的流程分析
- 实践 - 集成Spring Boot
- 实践 - 文档生成
- 文档生成 - 支持proto3
- 文档生成 - build插件
- 文档生成 - 使用模板定制输出
- 实践 - 代理
- 实践 - 超时
文档生成 - build插件
原有插件生成的 HTML 文件内容和格式并不理想,考虑自行调整。
因此 fork 了原有仓库,准备动手修改。
这样就有必要能自己从c的源代码开始编译打包。
参考原有的插件打包说明:
https://github.com/skyao/protoc-gen-doc/blob/master/BUILDING.md
准备工作
按照要求,需要准备两个东西:
- Protocol Buffers library from Google
- QtCore from Qt 5
先执行命令:
sudo apt-get install qt5-qmake qt5-default libprotobuf-dev protobuf-compiler libprotoc-dev
另外g++肯定是必备的了,没有安装的话先安装:
sudo apt-get install g++
make
在插件的代码根目录下,执行下面命令:
qmake
make
此时如果发现报错,无法include :
/usr/include/google/protobuf/compiler/plugin.h:58:42: fatal error: google/protobuf/stubs/common.h: No such file or directory
#include <google/protobuf/stubs/common.h>
^
compilation terminated.
make: *** [main.o] Error 1
说明第一个前提条件 “Protocol Buffers library from Google” 没有满足,需要先安装。
安装Protocol Buffers library
参考 protocol buffer 的 C++ Installation - Unix
:
https://github.com/google/protobuf/blob/master/src/README.md
先安装各种工具:
sudo apt-get install autoconf automake libtool curl make g++ unzip
然后准备开始build。注意这里有两个方式,对应着protocol release页面有两个下载地址:
- protobuf-cpp-3.0.0.zip
- Source code (tar.gz)
从source code开始:下载
Source code (tar.gz)
,然后开始build,因为这个包中没有configure脚本文件,因此需要执行./autogen.sh
来生成。而这个过程中需要下载jmock来做测试,但是jmock下载时又遇到无法下载的问题。所以不建议用这个方式从release package中,也就是下载
protobuf-cpp-3.0.0.zip
,这里面有现成的configure脚本文件,一次执行下面的命令:./configure
make
make check
sudo make install
sudo ldconfig
make完成之后,上面缺失的头文件就可以在下列地址找到了:
/usr/local/include/google/protobuf/stubs/common.h
清理
用上面的方式安装 protocol buffer 之后,protoc被安装在新的位置了:
$which protoc
/usr/local/bin/protoc
此时可以删除掉之前安装的版本:
sudo rm -rf /usr/bin/protoc
继续 make plugin
继续执行 proto-gen-doc 的make,这次就可以成功了:
$ make
g++ -m64 -Wl,-O1 -o protoc-gen-doc mustache.o main.o qrc_protoc-gen-doc.o -lprotoc -pthread -L/usr/local/lib -lprotobuf -lQt5Core -lpthread
完成之后,在当前目录下就会得到生成的 protoc-gen-doc
文件。
这个文件不需要安装,直接复制到 /usr/local/bin/protoc-gen-doc
就好了, 另外顺便清理一下之前安装在 /usr/bin/protoc-gen-doc
的版本:
sudo cp protoc-gen-doc /usr/local/bin/
sudo rm /usr/bin/protoc-gen-doc
使用时发现,之前放置在 /usr/include/
下的include文件现在又找不到了,需要同样移动到 /usr/local/include/
下:
$ protoc --doc_out=html,index.html:../../../target/contract-doc userService.proto
dolphin/dolphinDescriptor.proto: File not found.
userService.proto: Import "dolphin/dolphinDescriptor.proto" was not found or had errors.
# 移过去就好了
sudo mv /usr/include/dolphin/ /usr/local/include/
在CentOS6上安装
在centos 6 上安装时,遇到更多问题,记录下来备用。
- /usr/local/bin 值得PATH路径问题
上面的方法build并安装 protobuf-cpp 之后,protoc被成功安装在 /usr/local/bin/protoc
,直接执行 protoc 也可以找到,但是用jenkins就是报错找不到 protoc 。
只好在jenkins的shell脚本里面加入一句:
export PATH=/usr/local/bin:$PATH
随后protoc执行时报错说找不到 libprotoc.so.10 ,但是这个文件是有build到 /usr/local/lib
的,只要再加一句,将 /usr/local/lib
加入到LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
然后继续报错,这回是 GLIBC 版本太久:
protoc-gen-doc: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by protoc-gen-doc)
protoc-gen-doc: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by protoc-gen-doc)
--doc_out: protoc-gen-doc: Plugin failed with status code 1.
安装 GLIBC 2.14 版本(参考 http://blog.csdn.net/dodo_check/article/details/9341145):
wget http://mirror.bjtu.edu.cn/gnu/libc/glibc-2.14.tar.xz
xz -d glibc-2.14.tar.xz
tar xvf glibc-2.14.tar
cd glibc-2.14
mkdir build
cd build
./configure
make
make install
不幸报错:
/root/glibc-2.14/build/elf/ldconfig: Can't open configuration file /usr/local/lib/glic/etc/ld.so.conf: No such file or directory
make[1]: Leaving directory `/root/glibc-2.14'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论