0

AIX 5.3 でコンパイルされた実行可能ライブラリまたは共有ライブラリの objdump を実行しようとすると、このエラー メッセージが何度も表示されます。このマシン上の他の実行可能ファイルについては、正常に動作します。この実行可能ファイルは、実行時 (文字列の割り当て時) にもクラッシュします。

問題があるかどうかはわかりませんが、リンク中に次のような警告がいくつか表示されます: ld: 0711-224 WARNING: Duplicate symbol: non-virtual thunk to XYZ::~XYZ() (および1つの外部ライブラリですが、問題ないと確信しています)。

弱いシンボルに接続できると何かが教えてくれますが、その問題を解決する方法がわかりません。何が間違っているのか、これを続行するために確認できることはありますか?

また、すべての cpp ファイルを 1 つの大きなファイルに含めて、これをコンパイルしようとしました。まだセグメンテーション違反が発生しますが、別の場所で発生します (現在は g_strXXXXX.erase() - グローバル文字列の消去)。スタック トレースの一部は次のようになります。

(...)

.#3 0x101d8534 in __static_initialization_and_destruction_0(int, int) (__initialize_p=1, __priority=65535) at ../../licserver/someclass1.cpp:4

.#4 0x101d8df0 in GLOBAL _I_fc_softc () at ../../shared/someclass1.cpp:225

.#5 0x103c81fc in GLOBAL _FI_licserver_unittest ()

.#6 0xd03aadb0 in mod_init1 () from /usr/lib/libc.a(shr.o)

.#7 0xd03aacc4 in __modinit () from /usr/lib/libc.a(shr.o)

.#8 0x100001d4 in __start () (gdb) GLOBAL _I_fc_softc

libc または libstdc++ に問題があるように見えますか?

4

1 に答える 1

0

あなたは実際に正しいジョンでした、どうもありがとう!私のコードに「静的初期化順序の大失敗」の問題がありました。すべての疑わしいグローバルオブジェクトを関数呼び出しに置き換えた後、問題は解決したようです。

だから私は変更しました:

CFoo g_F;

の中へ:

CFoo& GetF() {
  static CFoo F;
  return F;
}

そして今は大丈夫です。コードのこの部分では、マルチスレッドのサポートは必要ありませんでした。そうでない場合は、シングルトンを使用します(コードが多すぎてグローバル変数を削除できません)。

于 2011-08-08T15:28:49.550 に答える