2012-01-23 2 views
2

MIPSベースの組み込みデバイスではなく、C++でアプリケーションをビルドしようとしています。まず、hereが見えるリンクの問題がありました。この問題は修正され、アプリケーションを正常に構築できます。今、私はstd::vectorクラスを使いたいです。私のコードは次のとおりです。ベクトルを使用することによりセグメントエラーが発生しました

#include <vector> 
using namespace std; 

int main() { 
    vector<char> v; 
    v.push_back('s'); 

    return 0; 
} 

vector<char> v;ラインを実行すると、Segment Faultメッセージが画面に表示されます。より多くのテストのために、私はnewオペレータをテストし、うまく動作します。私はアプリケーションを構築するためにmipsel-elf-g++を使用しています。

どうしたのですか?

+5

以前の質問から、C++コンパイラかなり壊れています。 'malloc'と' new'が最初に使用された場合、 'std :: vector'とは思えません。 http://stackoverflow.com/questions/8956979/segment-fault-caused-by-using-new-and-malloc – NPE

+0

コードは問題ないようです。もしそれがsegfaultsならば、あなたの周りの仕事が 'vector'を宣言している間にあるスペースを割り当てることができます。 'ベクトル v(100);'と試してみてください。 – iammilind

+0

@aix: 'malloc'と' new'の問題は修正されました。私の質問では、「新しい演算子をテストしたが、メモリ割り当て問題があることを強調するためにうまくいきます」と言います。 –

答えて

1

mipsのC++ライブラリをクロスビルドしたことを前提としています。ライブラリが正しく構築され、実際にあなたのmips用に設定されているかどうかを確認してください。また、実行可能ファイルをgdbにロードして、クラッシュが発生する場所を正確に調べることもできます。私はそれがlibC++のどこかで起こると思います。

+0

私は初心者のエンベデッドプログラマです。どのようにして 'MIPS'のC++ライブラリをクロスビルドできるのか分かりません。私は 'cygwin'を使用しています。クロスビルドされたC++ライブラリを作成するにはどうすればよいですか? –

+0

MIPSクロスコンパイラスーツはCygwinで利用できますか?実際に正しいコンパイラを使用していることを確認してください。さまざまなMIPS派生物があり、コンパイラスーツは_your_ MIPS仕様に適合しなければならない。 – boto

+0

'Cygwin'に存在する' mipsel-elf-gcc'と 'mipsel-elf-g ++'コンパイラを使用しています。私はこれらが適切であるかどうかわからないのですか? –

2

コメントに記載されているように、コンパイラおよび/またはランタイムライブラリは壊れています。 (あなたがターゲット上でOSを稼働していないことを意味する "elf"ターゲットがあるので、OSを除外することができます。存在しない場合は破壊できません)。

Cygwinのmipsel-elf-gccパッケージをデバッグしてみてください。これは古くてよくテストされていない可能性があります。別のコンパイラを使用することをお勧めします。特にメンター・グラフィックスの「Sourcery CodeBench Lite Edition」ビルドは、GCCコンパイラと関連するCおよびC++ライブラリをhttp://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/から無料でダウンロードできます。基本的にCygwinコンパイラのドロップイン置換えとして機能するはずです(普通のWindowsコンパイラとして名目上ビルドされていてもCygwinのパスで正しく動作することを含めて)、実際に正しく動作するかどうかのテストと検証が行われています。

[免責事項:私はメンター・グラフィックスのために働いています。私は偏っているとは言えませんが、このコンパイラの作業に多くの作業を行いました。世界は無料ですので、それが正しいことを確認するインセンティブがあります。また、CodeSourcery "Sourcery G ++"コンパイラに精通していれば、 "Sourcery CodeBench"はCodeSourceryがメンター・グラフィックスの一部であるため、それらの新しい名前です。

関連する問題