2

簡単な要約: gcc 4.1、aCC、VisualAge、および MSVC の下の多数のプラットフォームで正常に動作する多数の既存コード。現在、これを HP-UX で有効にできるように取り組んでいます。

出力は、複数 (8 ~ 10) の共有ライブラリで構成されます。

すべてが正常にコンパイルされるようになりましたが、テスト アプリを実行しようとすると、グローバル コンストラクターですぐに segfault が発生します。実際、gdb は、この実際のグローバル オブジェクトがどこにあるかについての情報を得ることができません。si_code は SEGV_ACCERR - オブジェクトに対する無効なアクセス許可であり、「this」ポインターは常に 0 です

初期化が null のオブジェクトの ctor を呼び出すのはどうしてですか? これは、gcc のグローバル初期化の概念と HP の概念 (HP の ld を使用) との競合ですか?

これを診断するという点で、ここからどこに行きますか?残念ながら、この問題を再現するテストケースに還元することはできません

4

2 に答える 2

1

まずobjdump、実行可能ファイル、オブジェクトファイル、および共有ライブラリで実行します。仮想アドレスが0(つまりNULL)のデータセグメントなどの疑わしいものを探します。

共有ライブラリでは、ランタイムリンクを実行するのはローダーの仕事です。おそらく、HP-UXローダーは本来あるべきものを再配置していません。

また、GNUld情報ページもご覧ください。CONSTRUCTORSオプションの下にリストされている潜在的に有用な情報がいくつかあります。オブジェクト形式が異なれば、動作も異なります。

于 2009-09-28T22:54:17.330 に答える
0

問題の共有ライブラリのコンパイルおよびリンクコマンドラインは何ですか?オブジェクトをでコンパイルし、直接ではなく"g++ -fPIC -c ..."でリンクしてください。追加のランタイムサポートコードにリンクする場合があります。これはで必要になる場合があります。"g++ -fPIC -shared ...""ld -b ..."g++HP-UX

于 2009-09-29T02:53:08.550 に答える