2011-03-28 14 views
0

Solarisの共有ライブラリにグローバル変数に関する問題があります。 サンプル、次の点を考慮:私は同じコードは、Linuxが動作しながら、Fooのコンストラクタは、Solarisで呼び出されることはありませんことに気付きましたSolaris共有ライブラリとグローバル変数

Foo g_Foo; 

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

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

私は共有ライブラリ内のいくつかのコードを持っています。

私はgcc 3.4.3とSunリンカーを使用しています。

+1

実際に行っているコード全体を投稿できますか?私はOSに問題があるとは思わない。 – Mahesh

+0

私はそれを2番目にします。私はこれまでSolarisでこのイディオムを多く使用してきました。 (確かに、私は通常、Sun CCを使用してコンパイルしましたが、実際にはg ++が問題ではないと思います) –

+0

これはシナリオですか?あなたが投稿したコードはうまくいくようです。しかし、あなたが言及したふるまいは私に "静的初期化失敗"を推測させます、あなたが投稿したコードはそれほど言いません。 –

答えて

1

共有オブジェクトを-Gフラグで作成していますか?例えば CC -G -o mylib.so myfile.cpp

-Gを指定しないと、グローバル変数が正しく初期化されないことがあります。コンパイラのドキュメントhereを参照してください。

注:ドキュメントでは、ldを使用することはできませんが、CCを使用してリンクを行う必要があることに注意してください。

関連する問題