c++中的静态结构和静态全局变量
static structure and static global variable in c++
有一个RPC框架,使用hessian作为默认的序列化。然后,一些客户端需要protobuf。为了与那些没有安装protobuf的人兼容,我们将所有protobuf支持放在一个文件中,并根据当前环境(是否有pb)有条件地编译它
框架有一系列的数据类型(Long, String, Map等),每一个都有一个序列化器,我们使用一个静态结构来注册这些函数,它看起来像:
/*file register.cc */
在protobuf支持文件中,我们做了类似的事情:
/* pb_support.cc */
两个文件在不同的目录中退出:
在gcc 4.1.2和Redhat5.6中,它工作得很好。在Ubuntu 13.04的gcc 4.8中,当protobuf在时,pb_object_install总是先执行,但是结果是零,这意味着pb注册的结果已经被清除,所以protobuf协议是无用的。
为什么呢?是否有替换来完成相同的函数?
全局命名空间中变量的初始化顺序是在单个翻译单元中声明。但是,翻译单元之间的初始化顺序没有指定。
这意味着如果你有两个源文件,你不能说哪个文件变量将首先被初始化。如果一个源文件中的变量依赖于另一个源文件中的变量首先被初始化,那么这当然会导致问题。
相关文章:
- 不同作用域中的静态变量和全局变量
- 静态 constexpr 全局变量
- 将静态全局变量声明为内联有什么意义吗?
- 全局变量中的静态常量与常量
- 没有参数的递归,也没有静态或全局变量
- 类中的静态成员变量和C++中的全局变量有什么区别?
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- 如何使用GDB跟踪Main()之前初始化的所有静态全局变量
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 如何在任何其他全局变量或静态变量之前创建/构造类实例
- 使用静态和避免单例模式声明全局变量
- C 中不允许静态/全局变量
- C 11指定静态/全局变量的构造顺序
- 静态全局变量初始化顺序
- 全局变量和静态全局变量的外部变量
- 访问内联函数中的静态全局变量
- c++中的静态结构和静态全局变量
- 使用静态/全局变量作为默认参数
- 静态全局变量的奇怪行为
- c++中的静态全局变量