最近做的项目,一个module需要加载多个插件,插件是用dlopen的方式加载的。module中使用一些gflags,而插件中也需要使用gflags。
在module启动时执行ParseCommandLineFlags,之后在加载插件,读取/proc/self/commandline中的数据,之后也执行ParseCommandLineFlags,但是在插件中不能获取相应的flags的值,见最后一个图。
之后认真看了gflags的头文件中的内容。下面的回答解决了我的问题,即在ParseCommandLineFlags之前加入AllowCommandLineReparsing(),之后在解析flags的时候执行ReparseCommandLineNonHelpFlags()就可以在插件中解决不能获取flags值问题。
解决这个问题后的反思:
遇到问题如果自己思考同时也不能通过搜索获取解决办法,那么就认真看源代码很可能解决问题。