libssh2编译(libzmq编译)

libssh2编译(libzmq编译)brpc 鼓励静态链接依赖 以便于每个运行 brpc 服务的机器不必再安装依赖 brpc 有如下依赖 gflags Extensively used to define global options protobuf Serializatio of messages interfaces of services leveldb Required by rpcz to record

大家好,我是讯享网,很高兴认识大家。



brpc鼓励静态链接依赖,以便于每个运行brpc服务的机器不必再安装依赖。

brpc有如下依赖:

  • gflags: Extensively used to define global options.
  • protobuf: Serializations of messages, interfaces of services.
  • leveldb: Required by rpcz to record RPCs for tracing.
  • Ubuntu/LinuxMint/WSL
  • Fedora/CentOS
  • 自己构建依赖的Linux
  • MacOS
  • Docker

依赖准备

安装依赖:

如果你需要静态链接leveldb:

如果你要在样例中启用cpu/heap的profiler:

如果你要运行测试,那么要安装并编译libgtest-dev(它没有被默认编译):

gtest源码目录可能变动,如果不存在,请尝试。

使用config_brpc.sh编译brpc

git克隆brpc,进入到项目目录,然后运行

修改编译器为clang,添加选项。

不想链接调试符号,添加选项,然后编译将会得到更轻量的二进制文件。

使用glog版的brpc,添加选项。

要启用 thrift 支持,首先安装thrift并且添加选项。

运行样例

上述操作会链接brpc的静态库到样例中,如果你想链接brpc的共享库,请依次执行:和

运行测试

使用cmake编译brpc

要帮助VSCode或Emacs(LSP)去正确地理解代码,添加选项去生成。

要修改编译器为clang,请修改环境变量和为和。

不想链接调试符号,请移除,然后用选项执行cmake。

想要让brpc使用glog,用选项执行cmake。

要启用 thrift 支持,先安装thrift,然后用选项执行cmake。

用cmake运行样例

上述操作会链接brpc的静态库到样例中,如果你想链接brpc的共享库,请先移除,然后用选项重新执行cmake。

运行测试

依赖准备

CentOS一般需要安装EPEL,否则很多包都默认不可用。

安装依赖:

如果你要在样例中启用cpu/heap的profiler:

如果你要运行测试,那么要安装ligtest-dev:

使用config_brpc.sh编译brpc

git克隆brpc,进入项目目录然后执行:

修改编译器为clang,添加选项。


讯享网

不想链接调试符号,添加选项 然后编译将会得到更轻量的二进制文件。

想要让brpc使用glog,添加选项:。

要启用 thrift 支持,先安装thrift,然后添加选项:。

运行样例

上述操作会链接brpc的静态库到样例中,如果你想链接brpc的共享库,请依次执行:和

运行测试

使用cmake编译brpc

参考这里

依赖准备

brpc默认会构建出静态库和共享库,因此它也需要依赖有静态库和共享库两个版本。

以gflags为例,它默认不构建共享库,你需要给指定选项去改变这一行为:

编译brpc

还以gflags为例,表示gflags被克隆的位置。

git克隆brpc。进入到项目目录然后运行:

这里我们给和传递多个路径使得脚本能够在多个地方进行检索。你也可以打包所有依赖和brpc一起放到一个目录中,然后把目录传递给 –headers/–libs选项,它会递归搜索所有子目录直到找到必须的文件。

修改编译器为clang,添加选项。

不想链接调试符号,添加选项,然后编译将会得到更轻量的二进制文件。

使用glog版的brpc,添加选项。

要启用thrift 支持,首先安装thrift并且添加选项。

使用cmake编译brpc

参考这里

注意:在相同硬件条件下,MacOS版brpc的性能可能明显差于Linux版。如果你的服务是性能敏感的,请不要使用MacOS作为你的生产环境。

Apple Silicon

master HEAD已支持M1系列芯片,M2还未测试。欢迎通过issues向我们报告遗留的warning/error。

依赖准备

安装依赖:

如果你要在样例中启用cpu/heap的profiler:

如果你要运行测试,需安装gtest。先运行看看homebrew是否支持(老版本没有),没有的话请下载和编译googletest:

在编译完成后,复制和目录到和目录中,以便于让所有应用都能使用gtest。

OpenSSL

Monterey中openssl的安装位置可能不再位于,很可能会在目录下,如果编译时报告找不到openssl:

  • 先运行看看是否出现了
  • 没有的话可以自行设置软链:。请注意此命令中openssl的目录可能随环境变化而变化,可通过查看。

使用config_brpc.sh编译brpc

git克隆brpc,进入到项目目录然后运行:

MacOS Monterey下的brew安装路径可能改变,如有路径相关的错误,可考虑设置如下:

不想链接调试符号,添加选项,然后编译将会得到更轻量的二进制文件。

使用glog版的brpc,添加选项。

要启用thrift 支持,首先安装thrift并且添加选项。

运行样例

上述操作会链接brpc的静态库到样例中,如果你想链接brpc的共享库,请依次执行:和

运行测试

使用cmake编译brpc

参考这里

使用docker 编译brpc:

GCC: 4.8-11.2

c++11被默认启用,以去除对boost的依赖(比如atomic)。

GCC7中over-aligned的问题暂时被禁止。

使用其他版本的gcc可能会产生编译警告,请联系我们予以修复。

请在makefile中给cxxflags增加选项以避免gcc4+中的errno问题.

Clang: 3.5-4.0

无已知问题。

glibc: 2.12-2.25

无已知问题。

protobuf: 2.4+

同一个文件兼容pb 3.x版本和pb 2.x版本: 不要使用proto3新增的类型,并且在proto文件的起始位置添加声明。 tools/add_syntax_equal_proto2_to_all.sh这个脚本可以给所有没有这行声明的proto文件添加声明。

pb 3.x中的Arena至今没被支持。

gflags: 2.0-2.2.1

无已知问题。

openssl: 0.97-1.1

被https功能需要。

tcmalloc: 1.7-2.5

brpc默认链接 tcmalloc。用户按需要链接tcmalloc。

和glibc内置的ptmalloc相比,tcmalloc通常能提升性能。然而不同版本的tcmalloc可能表现迥异。例如:tcmalloc 2.1与 tcmalloc 1.7和2.5相比,可能会让brpc的多线程样例性能显著恶化(tcmalloc中的一个自旋锁导致的)。甚至不同的小版本号之间表现也可能不同。当你的程序表现不符合预期的时候,移除tcmalloc然后尝试其他版本。

用gcc4.8.2编译然后链接更早版本GCC编译的tcmalloc,可能会让程序中main()函数之前挂掉或者死锁,例如:

img

当你遇到这个问题的时候,请用同一个GCC重新编译tcmalloc。

另外一个使用tcmalloc的常见问题是,它不会像 ptmalloc一样及时地归还内存给系统。因此当有一个无效的内存访问的时候,程序可能不会直接挂掉,取而代之的是它可能在一个不相关的地方挂掉,或者甚至一直不挂掉。当你的程序出现怪异的内存问题的时候,尝试移除tcmalloc。

如果你要使用cpu profiler或heap profiler,要链接。这两个 profiler都是基于tcmalloc的。而contention profiler不需要tcmalloc。

当你移除tcmalloc的时候,不仅要移除tcmalloc的链接,也要移除宏。

glog: 3.3+

brpc实现了一个默认的日志功能它和glog冲突。要替换成glog,可以给config_brpc.sh增加选项或者给cmake增加选项。

valgrind: 3.8+

brpc会自动检测valgrind(然后注册bthread的栈)。不支持老版本的valgrind(比如3.2)。

thrift: 0.9.3-0.11.0

无已知问题。

我们提供了一个程序去帮助你追踪和监控所有brpc实例。 只需要在某处运行 trackme_server 然后再带着 -trackme_server=SERVER参数启动需要被追踪的实例。trackme_server将从实例周期性地收到ping消息然后打印日志。您可以从日志中聚合实例地址,并调用实例的内置服务以获取更多信息。

修改于 2023年12月20日: fix spell error in index.md (#166) (a5cf0c589)

小讯
上一篇 2025-04-19 22:19
下一篇 2025-06-16 12:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/195043.html