Solaris 共享库和全局变量

发布于 2024-10-27 13:08:45 字数 304 浏览 5 评论 0原文

我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

转身泪倾城 2024-11-03 13:08:45

您是否使用 -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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文