我在Solaris上的共享库中遇到了全局变量的问题。 请考虑以下示例:
class Foo
{
public:
Foo() { Init(); }
private:
void Init() { // do something }
};
我在共享库中有一些代码:
Foo g_Foo;
我注意到在Solaris上从不调用Foo构造函数,而相同的代码在Linux上工作。
我正在使用gcc 3.4.3和Sun链接器。
答案 0 :(得分:1)
您是否使用-G标志创建共享对象?例如 CC -G -o mylib.so myfile.cpp
如果未指定-G,则编译器可能无法正确初始化全局变量。请参阅编译器文档here。
注意,文档还说你不能使用ld,但需要用CC来做链接。