6

セットアップは次のとおりです。

私の同僚は、(buildroot からの) gcc 4.3.3 クロス コンパイラを備えた Fedora x64_86 マシンを持っています。同じクロス コンパイラを搭載した Ubuntu 9.04 x64_86 マシンを使用しています。

私の同僚は、テスト マシンで動作するライブラリ + テスト アプリを作成しました。同じライブラリと testapp をコンパイルしましたが、同じテスト マシンでクラッシュします。

私の知る限り、gcc は buildroot でコンパイルされた ucLibc に対してビルドされているため、同じコード、同じコンパイラです。クロス コンパイルに影響を与えるホスト マシンの相違点は何ですか?

任意の洞察をいただければ幸いです。

更新: 明確にするために、コンパイラは同一です。ライブラリと testapp のソース コードは同一です。唯一の違いは、testapp + lib が別のマシンでコンパイルされていることです。

4

6 に答える 6

7

コードがクラッシュした場合 (sigsegv を取得したと仮定します)、バグがあるようです。ダングリング ポインターの使用やバッファー境界を超える書き込みなど、何らかの未定義の動作である可能性が最も高いです。

未定義の動作の残念な点は、一部のマシンで動作する可能性があることです。あなたはここでそのような出来事を経験していると思います。バグを見つけようとすると、何が起こるかがわかります:-)

于 2009-08-12T19:22:13.183 に答える
3

どのようにクラッシュしますか?より具体的に、出力、リターン コードなどを提供できますか? 便利な printf() をプラグインしてみましたか?

そして、ここでさらにいくつかの詳細が必要だと思います:

  1. testapp はライブラリにリンクしていますか?

  2. ライブラリは静的ですか、動的ですか?

  3. ライブラリはライブラリ検索パスにあるか、またはそのディレクトリを ld.so.conf に追加しましたか?

  4. ライブラリと testapp のインストール手順に従っていますか?

  5. 2 つのライブラリと testapps はビット単位で互換性がありますか? あなたはそれらがそうであると思いますか?

  6. 同僚と同じユーザーとして、同じ環境と権限で実行していますか?

于 2009-08-12T19:18:33.893 に答える
1

ターゲット (テスト マシン) はどのアーキテクチャですか?

ディストリビューションが提供するコンパイラを使用していますか? 通常、gcc には非常に多くのパッチが適用されています。たとえば、gentoo には約 20 個のパッチがあり、fedora と ubuntu はそれほど違いはありません。ただし、すべてのパッチが 100% 適切というわけではありません :-( そのため、コンパイラは実際には異なる場合があります。

ディストリビューションで gcc の「バニラ」バージョンを探すと、うまくいくかもしれません。

于 2009-08-12T19:16:45.083 に答える
1

暗闇の中での刺し傷として、初期化されていない変数を探します。すべてのローカル変数とグローバル変数に値が割り当てられていることを確認してください。コンストラクターにすべてのデータ メンバーの初期化子があることを再確認してください。

于 2009-08-13T04:13:39.647 に答える