1

make に複数のジョブを処理するように依頼するのが安全な場合についての簡単なガイドラインはありますか?

以前は問題なく動作しているように見えたのに、最近はしつこくトラブルを起こしていたので質問します。

私は「make -j8」を実行しました (ビルドを高速化するために 8 つのジョブを使用します)。

生成された共有ライブラリの 1 つで「.so ファイル形式が認識されません」。これは、共有ライブラリをクリーンアップした後でもあり (make clean は正常に削除されましたが、手動で削除するという不要な手順も実行しました)、再度開始しました。

問題を見た後、私は今、複数のジョブをまったく使用することに不安を感じています。make で複数のジョブを使用できるかどうかを事前に判断する方法はありますか?

4

1 に答える 1

0

これはすべて、依存関係が Makefile でどれだけうまくレイアウトされているかにかかっています。行の順序や偶然の一致だけに依存するのではなく、すべての依存関係を指定することに細心の注意を払う必要があります。

の出力が正常に機能したのに機能しなかったという状況がありました。これはmake -j2make -j41 つの項目がコンパイルされる前にコンパイルされていたためでしたが、それを指定する際に十分に注意していませんでした。同様に、私はmake -j4動作しているように見えましたが、特定の部分が古いコードでコンパイルされていることがわかりました。つまり、最終製品は予想とは異なるものになるでしょう. make clean自由に安全に使用できるようにする依存関係の問題を見つける前に、ビルドの前に確認する必要がありましmake -j4た。

それぞれの質問にお答えします。

  • make に複数のジョブを処理するように依頼するのが安全な場合についての簡単なガイドラインはありますか?

私の本にはありません。依存関係が完全に正しい場合は、問題ありません。それ以外の場合は、注意してください。

  • make で複数のジョブを使用できるかどうかを事前に判断する方法はありますか?

答えは前の項目と同じだと思います。私は通常、うまくいかないことがわかるまでうまくいくと思い込んでから、問題を見つけようとします。ただし、これは安全な作業方法ではない可能性があります。予期しない結果が発生した場合は、複数のジョブを使用せずにmake cleanand thenを使用して、問題が解決するかどうかを確認してください。makeそうであれば、Makefile の依存関係が正しくないと合理的に推測できます。

また、この問題に関する暗黙の質問もあります.so file format not recognized。それは同じ問題のように聞こえます。具体的には、.so が間違った依存関係でビルドされているか、正しいものが見つかるかビルドされる前に間違った .so が取り込まれているか、.so が呼び出されたときに不完全な状態である可能性があります。

于 2013-09-12T13:37:00.040 に答える