Solaris 共享库和全局变量
我在 Solaris 上的共享库中遇到全局变量问题。 考虑以下示例:
class Foo
{
public:
Foo() { Init(); }
private:
void Init() { // do something }
};
我在共享库中有一些代码:
Foo g_Foo;
我注意到 Foo 构造函数在 Solaris 上从未被调用,而相同的代码在 Linux 上运行。
我正在使用 gcc 3.4.3 和 Sun 链接器。
I have an issue with global variables in shared library on Solaris.
Consider following sample:
class Foo
{
public:
Foo() { Init(); }
private:
void Init() { // do something }
};
I have some code in shared library:
Foo g_Foo;
I've noticed that Foo constructor is never called on Solaris while the same code works Linux.
I'm using gcc 3.4.3 and Sun linker.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您是否使用 -G 标志创建共享对象?例如
CC -G -o mylib.so myfile.cpp
如果不指定-G,则编译器可能无法正确初始化全局变量。请参阅此处编译器文档。
请注意,文档还说您不能使用 ld,但需要使用 CC 来进行链接。
Are you creating the shared object with the -G flag? e.g.
CC -G -o mylib.so myfile.cpp
If you don't specify -G, then the compiler may not initialise global variables correctly. See compiler documentation here.
Note, the docs also say you can't use ld, but need to use CC to do the linking.