背景

业务进程通常需要很多可以修改的配置, 通常的做法是自己写配置到文件,然后程序解析。
但是这样扩展性差,gflag 提供了统一的接口,节省了手动修改的工时。同时它还支持在线修改。

方法

include 对应头文件

DEFINE

DECLARE

use it

link it

run it

经验

不要重复造轮子

记录碰到的问题

不识别

  • 现象
 error: expected constructor, destructor, or type conversion before ‘(’ token DEFINE_string(host_ip, "127.0.0.1", "host ip of test machine");
  • 解决办法

编译器不识别DEFLINE, 要么是没有inc

重复定义

链接的时候报告如下错误:

 multiple definition of `fLI::FLAGS_

解决办法:
去掉头文件里的:

 DEFINE_int32(reserve_space, 50, "reserve_space");

把DEFINE 放到.cpp 文件, DECLARE 放到头文件。

未定义符号

“`
manager.h:134: undefined reference to `│-rw-r–r– 1 root root 12320 Sep 25 19:49 ucx_server.h
fLB::FLAGS_enable_flow_control’

这是光DECLARE, 但实际没有DEFLIEN 导致的。 DEFINE 一下缺失的变量就好。

使用flagfile

每次在命令行传递参数麻烦,可以用flags.txt,flags.txt文件内容
–host=10.1.1.1
–port=8077
$./gflags_test –flagfile=flags.txt