10

TLDR: Centos Redhat で動作する C++ プログラムを Ubuntu Debian でコンパイルする際に問題が発生しました。これら 2 つの間に、同じコンパイラを使用してコンパイルされた C++ プログラムが機能しないようにするために注意すべきことはありますか?

こんにちは、私は Germline (http://www1.cs.columbia.edu/~gusev/germline/) をコンパイルして実行しようとしています。RedHat Centos では正常に動作しますが、Centos は Ubuntu ほどサポートされていないため、切り替えたほとんどのものに対応しています。そして今、このプログラムは機能しません。ある種の RedHat のみの機能を使用している可能性は十分にありますが、同じコンパイラ (g++) を使用して両方の環境でコンパイルしています。

私はこのことを Ubuntu で動作させようとして髪を伸ばしてきましたが、これは作業がはるかに優れているためですが、今のところ、ubuntu でプロジェクトを「すべて作成」すると、コンパイルされ、テストがスピンします(ドン決して終わらせない)永遠に。どのバイナリを使用しても (Centos でコンパイルしてコピーしたもの、前述の失敗したテスト バイナリなど)、プログラムは常にフリーズします。

ちょっと長いです、ごめんなさい。私の主な質問はこれです: 私が試すことができる他の C++ コンパイラの代替手段はありますか? 欠落している可能性のある Red-hat C++ ライブラリはありますか? または、これを引き起こす可能性のある C++ 実装の大きな違いはありますか?

4

5 に答える 5

2

の使用while(!stream.eof())はよくある間違いです。ステートメントstream.eof()が true の場合、必ずしもストリームでの最後の操作が成功したことを意味するわけではありません。

GNU でパッケージをコンパイルするためのいくつかの bash スクリプトを次に示しますg++4.6

wget http://www1.cs.columbia.edu/~gusev/germline/germline-1-5-1.tar.gz
tar -xzvf germline-1-5-1.tar.gz
cd germline-1-5-1/
perl -p -i.bak -e's/!stream\.eof\(\)/stream/g' PEDIndividualsExtractor.cpp
perl -p -i.bak -e's/!stream_sample.eof\(\)/stream_sample/g' HMIndividualsExtractor.cpp
make all
cat test/generated.out
于 2013-04-24T01:03:42.737 に答える
1

最初のエラーが実際に何であるかを指定する必要があります。問題が何であるかを説明するのに十分な情報を提供していませんが、依存関係が欠落していると思います。

まともなパッケージには依存関係のリストが付属しています。これを確認し、要件があることを確認しましたか?

要件と依存関係のリストがない場合、この状況での適切な経験則は、最初のエラーが何であるかを確認し、それを修正することです。たとえば、最初のエラーで「foolib.h が見つかりません」と表示された場合は、そのマシンに「foolib」をインストールする必要があります。

于 2012-10-18T18:39:50.257 に答える
1
  1. make all独自のステップとして実行し、すべてが正常にコンパイルされたことを確認します。
  2. を実行make testsし、失敗したテストを確認します。

これらは最初のステップであり、ほとんどの場合、そこに到達する可能性があります。

PenguinCoder が上で述べたように、コンパイラのバージョンが Ubuntu と Redhat で同じであることを確認する必要があります。でメジャー バージョン アップグレードが行われるたびにgcc、いくつかの (マイナーな) 問題が発生しました。

于 2013-04-19T19:52:44.573 に答える
0

Ubuntu でのみプログラムを使用する必要がある場合は--static、静的実行可能ファイルをコンパイルするようにプログラムを構成してから、実行可能ファイルを Ubuntu にコピーできます。

または、コマンドを使用して動的実行可能ファイルがリンクさlddれているファイルを見つけ、これらのファイルを動的実行可能ファイルの同じディレクトリにコピーし、それらを Ubuntu に配置して実行することもできます。ファイルを別のディレクトリに置き、実行可能ファイルがファイルを見つけやすくするために使用することもできます。.so.so.soLD_LIBRARY_PATH.so

于 2013-04-25T10:55:21.347 に答える