2011-03-28 99 views
0

我在Solaris上的共享庫中存在全局變量問題。 考慮下面的示例:Solaris共享庫和全局變量

class Foo 
{ 
public: 
Foo() { Init(); } 

private: 
    void Init() { // do something } 
}; 

我在共享庫的一些代碼:

Foo g_Foo; 

我注意到,富構造被稱爲永遠不會在Solaris上,而相同的代碼工作的Linux。

我使用gcc 3.4.3和Sun鏈接器。

+1

你能發佈你正在做什麼的整個代碼嗎?我不認爲操作系統有問題。 – Mahesh 2011-03-28 16:39:03

+0

我會再來。過去我在Solaris下使用過這種成語,它一直很有用。 (不可否認,我通常使用Sun CC編譯,但我真的不認爲g ++是問題所在。) – 2011-03-28 16:43:06

+0

您確定這是該場景。你發佈的代碼看起來很好。但是你提到的行爲讓我猜「靜態初始化失敗」,你發佈的代碼並沒有這麼說。 – 2011-03-28 16:44:42

回答

1

您是否使用-G標誌創建共享對象?例如 CC -G -o mylib.so myfile.cpp

如果不指定-G,則編譯器可能無法正確初始化全局變量。請參閱編譯器文檔here

請注意,文檔也說你不能使用ld,但需要使用CC來做鏈接。

相關問題