5

uclibc を使用して MIPS CPU で実行するマルチプロセス プログラムがあり、gcc 4.5.3 でコンパイルされています。プロセスの 1 つ ("tv" という名前) は、私が作成した 1 つの共有ライブラリ (libtest.so) とリンクする必要があります。「tv」プロセスは C++ で記述され、libtest.so は C で記述されています。

また、libtest.so から elf ヘッダーをダンプしたところ、PIC フラグと CPIC フラグの両方が設定されているので、ライブラリの作成は問題ないと思います。

プログラムを実行しようとすると、「tv」プロセスを除くすべてのプロセスが正常に開始されます。エラーメッセージはありません。ps を使用してステータスを確認すると、ゾンビプロセスになっています。

私は次のことを試しました

  1. リンク プロセスから libtest.so を削除し、libtest.so への参照を削除すると、「tv」プロセスは問題なく実行できます。

  2. libtest.so への参照を削除しても、リンク プロセスで libtest.so を保持すると、「tv」プロセスは実行されません。

  3. デバッグに LD_DEBUG=all を使用しようとしましたが、有効な出力がないため、ボードでは機能しません。

したがって、「tv」プロセスの開始時にldがlibtest.soをロードしようとすると、何か問題が発生したと思います。しかし、デバッグ方法がわかりませんか?libtest.so のどの部分が問題を引き起こしているかを調べるにはどうすればよいですか?

どんな提案でも大歓迎です。前もって感謝します。

4

2 に答える 2

0

これが、C関数として呼び出されるAPIのexternC宣言を見逃すこととは関係がないことを確認してください。

于 2012-12-10T12:30:37.300 に答える
0

ロード プロセスでエラーが発生しました。したがって、ライブラリをロードしてすぐにアンロードし、デバッグする最も単純なアプリケーションを作成します。

于 2013-01-08T15:16:58.530 に答える