背景
业务进程通常需要很多可以修改的配置, 通常的做法是自己写配置到文件,然后程序解析。
但是这样扩展性差,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