3

64 ビット Ubuntu 12.04 で実行する C++ アプリケーションを開発しています。32 ビット 12.04 Ubuntu ラップトップでコードを開発し、それを git リポジトリにアップロードし、サーバーにプルして、プルしたソースをネイティブにビルドします。

最近まで問題なく動作していましたが、今日、64 ビット サーバーでコンパイルしようとすると g++ 4.6.3 がクラッシュし、クラッシュ レポートを送信するように指示する出力が表示されました (g++ 4.6.3 は私が持っているのと同じバージョンです)。私の開発マシンでも)。同一のコードは、私の開発マシンでクラッシュを引き起こしませんでした。

クラッシュした理由を尋ねているわけではありませんが、可能であれば何が問題だったのか知りたいです。g++ は、問題が発生したときにファイル ログを生成しますか? 私のコードが物議を醸すようなことをしていないことがわかる限り、私はテンプレートを作成していません。単純に、いくつかのブースト ライブラリ、mysql++、openssl、および自分で作成したいくつかの静的ライブラリを使用しています。私は本当にこのアプリケーションを毎日実行する必要があるので、できるだけ早くこれを修正したいと思っています. 物事に対処するために次の方法を考えることができます

  1. コードのどの部分がコンパイラをクラッシュさせたのかを調べ、それに応じてコードを書き直してください。
  2. 別のサーバーをレンタルします。
  3. g++ をアップグレード (またはダウングレード) するか、サーバーに追加の g++ を作成して試してください。Ubuntuでg ++をアップグレードするとシステムが台無しになる可能性があることを読んだので、これを行うのは気が進まない.
  4. 私は Eclipse を使用して開発マシンですべてをビルドし、git プロジェクトの一部として作成した Eclipse で生成された makefile を使用してサーバーでコードをビルドするだけです。ビットサーバー。

進め方についてアドバイスをいただければ幸いです。私はコンパイラが内部でどのように機能するかについての専門家ではなく、この種のエラーに遭遇したのはこれが初めてなので、次に何をすべきかよくわかりません.

4

1 に答える 1

1

進め方のアドバイスをいただければ幸いです

クラッシュの原因の 1 つは、ハードウェアの問題 (ディスク、ディスク コントローラ、メモリなどの障害) である可能性があります。これを検出するのは困難です。

別の理由はコンパイラのバグかもしれませんが、ほとんどありません。

あなたができることは次のとおりです。

  • サーバーのハードウェアをチェックします (考えられるすべてのチェックを実行します)。別のマシンで何度もコンパイルを試みる
  • システムの仮想メモリが不足していないことを確認してください
  • コンパイラをアップグレードまたは変更し、それが発生するかどうかを確認します

ハードウェアの問題が原因で g++ がクラッシュする可能性があることを説明するさまざまな記事があります。

  • コンパイル中にクラッシュする - ほとんどの場合、インストール、コンパイラ、またはカーネルに問題はありません。ハードウェアと関係がある可能性が非常に高いです。この「規則」には 2 つの例外があります。仮想メモリが不足しているか、Red Hat 5.x、6.x、または 7.x をインストールしている可能性があります。
  • 最適化中にクラッシュする
于 2013-04-11T07:27:50.167 に答える