1

Windowsで、MinGWとEclipseをインストールし、MinGW GCCツールチェーンを使用してfooという名前の新しいC++プロジェクトを作成しました。これにより、コンパイル、実行、さらにはデバッグが行われます。素晴らしい。

まだWindowsの下で、インターネット接続にストレスを与える壮大な事業であるCygwinをインストールしました。最終的に、CygwinGCCツールチェーンとbarのプロジェクト名を指定しました。これはコンパイルして実行しますが、デバッグをステップスルーすることはできません(ソースが見つからないと主張します)。

Linuxでは、具体的にはmint13で、すべてのトリミングを含むすべての歌を歌うすべてのダンスのC ++エディションをインストールし、さらに刺激的な名前のbazとLinuxGCCツールチェーンを選択して新しいC++プロジェクトを作成しました。Eclipseはiostreamが見つからないと文句を言います。

私はこれにかなり混乱しています。ターミナルウィンドウを起動してg++を実行すると、それが見つかるので、明らかに少なくともいくつかのGNUC++のものがあります。何が欠けているのかわかりません。Linuxは私にとって新しい世界です。誰かがガイダンスを提供できますか?

記録のために、生成されたコードはfoo.cpp(またはプロジェクト名によるとbar.cpp)と呼ばれるファイルにあり、次のようになります。

#include <iostream>
using namespace std;

int main() {
  cout << "Hello World" << endl; // prints Hello World
  return 0;
}

@bmargulies-あなたのコメントは頬の舌だったと思いますが、ピンクのフィットでemacsは使用しません。SAMBAをセットアップし、WindowsワークステーションでTextpadを使用します。これは、新しいテキストエディターの使用法を不必要に学ぶことなく、十分に学ぶことができるためです。私がEclipseを選んだ理由は、Linux上のC++の勇敢な新しい世界を探索するための統合デバッガーを備えた実用的なベースラインを提供するかもしれないという無駄な希望でした。MinGWと組み合わせると、Windowsでそれを提供しました

ここでの大きな問題はツールではなく、私の無知と別の世界からの一連の期待です。これは、C++の経験不足によってさらに複雑になっています。C++での私の唯一の経験は15年前にTurboCを使用したことでした。

大きな混乱の原因は、ライブラリ参照を解決するために使用されるメカニズムです。

多くのプロジェクトがmakeを使用しているようです。これは、私が知る限り、プロジェクトまたはプロジェクトのセットをコンパイルおよびリンクするための一種のスクリプトファイルです。Makeにはさまざまなフレーバーがあり、makefileを使用する代替手段と使用しない代替手段もあるようです。

[罵倒]なんてめちゃくちゃ。

@Basile-私はEclipseの使用に夢中になっておらず、IDE構成のポイントアンドクリック使用に対するスクリプトの利点をよく知っています(特に、ビルドプロセスをソース管理できることです)。読書リストありがとうございます。おそらくこれはばかげた(または時期尚早の)質問ですが、私は尋ねなければなりません:エディターをビルドツールと統合するEclipseのようなIDEがなければ、ステップスルーデバッグを行うことは可能ですか?

@bmargulies-ツールチェーンの定義におそらく何か問題があることに同意しますが、その意味のある調査を行うための背景と経験が不足しています。上記のように、私はWindowsでさまざまなツールチェーンを使用してさまざまなレベルの成功を収めたため、ツールチェーンが問題の重要な要因であると結論付けるのが妥当です。残念ながら、LinuxではMinGWツールチェーンを選択できません。


Normのアドバイスに従って、コマンドラインからfoo.cppをコンパイルすることができました。hello worldプログラムは目的の動作で実行されますが、派手なIDEツールが解決しなかったときにg++がiostreamを解決する方法をどのように知っていたかはまだわかりません。

gdbを試すために、fooにさらに数行のコードを追加してコンパイルしました。できます!ターミナルウィンドウを使用してステップスルーデバッグを実行できると想像した人は誰でも!でも少し不器用です。

Basileは、派手なIDEは必要ないということは明らかですが、それは、歩くことができるのでバイクは必要ないと言っているようなものです。言及されている他のIDEを見ていきますが、それらはすべて同じツールチェーンを使用しているため、私が誤って構成したものはすべて同じように苦しんでいると思います。


バジル、ゴールポストを動かしてくれて許して。私の当初の目標は確かに「hello.cppをコンパイルして実行する」ことでしたが、gdbは必然的に次のステップでした。それは機能します、そしてこれが大学でテレタイプを使用している80年代初頭であったなら、私はおそらく今かなり幸せでしょう。しかし、それは80年代初頭ではなく、過去10年間、構文の色付け、オートコンプリート、可変スニッフィングの編集と継続のデバッグに費やしてきました。

4

2 に答える 2

2

私は以前にEclipsec/ C ++バージョンを使用しましたが、同じ問題がたくさんありました。私にとって、日食は非常に扱いにくいものでした。コマンドラインを使用して、最初にc /c++プログラムをコンパイルすることをお勧めします。私の意見では、実行可能ファイルがどのように作成されるかを理解するのは簡単で重要です。

g++ -Wall -g Hello.cpp -o Hello

実行可能なHelloを生成します。-Wallプログラムをコンパイルするときに、より多くの警告を表示するオプションです。いくつかの警告は、修正しないとプログラムがクラッシュするので、前もって確認しておくと便利です。-ggdbがプログラムを段階的に実行できるように、デバッグシンボルを提供します。

を使用してgdbに入るときは、gdb Helloこのgdbチートシートを確認できます。

複数のソースファイルを使用してプログラムの作成を開始したら、コンパイルの2つの主要な手順を理解する必要があります。最初のステップでは、個々のソースファイルをオブジェクトファイルに変換します。次のステップでは、すべてのオブジェクトファイルをリンクして実行可能ファイルを作成します。このリンクはコンパイルとリンクを説明しているかもしれません、明らかにウィキペディアもその情報の良い情報源です。

于 2012-09-10T02:51:56.720 に答える
0

Eclipseのような派手なIDEは必要ありません。Linuxで開発する通常の方法は、いくつかのツールを使用することです。

emacsまたはのようなエディタを使用してファイルgeditを編集しhelloworld.cppます。ターミナルにemacsまたはを入力してエディタを起動します(おそらく、編集されたファイルの名前がgedit続きます)。helloworld.cpp

次に、次のコマンドでコンパイルします

g++ -Wall -g helloworld.cpp -o helloworld

ターミナルに入力します。警告が出なくなるまでコードを改善します。GCCを最適化する(またはさらに最適化する)場合は、上記の-O後に追加できます。バイナリ実行可能プログラムのベンチマークまたはリリースを行う場合は、GCCに最適化を依頼する必要があります。は標準C++ライブラリ()をリンクする方法を知っており、ヘッダーはg ++で知られている標準の場所にあります(引数を追加して、何が起こっているかを示すことができます)。追加のライブラリを使用する場合は、さらに多くの引数が必要になります。-g-O2-O3g++libstdc++.so-vg++

引数の順序はg++、特に-Iオプション(ディレクトリを含む)と-l(ライブラリ)の場合に重要です。

プログラムをデバッグする場合(GCCに最適化を依頼することは避けてください)、次のように入力します。

gdb helloworld

デバッガーを実行します。詳細については、こちらをご覧くださいgdb(もちろん、gdbを使用して段階的に実行できます。最初は、、、、のコマンドを使用します。たとえば、next非常stepに便利な場合もあります)。breakbacktracegdbwatch

デバッガなしでプログラムを実行する場合は、次のように入力します。

./helloworld

後で、いくつかのコンパイル単位でプログラムを開発する必要があります。そのようなバルダーの使い方を学びましょうmakeomakeや他の多くのような他のビルダープログラムがあります。

GCC(提供g++)、Gnu MakeGDB(gnuデバッガー)、EmacsGITバージョン管理についてもっと読む

makeF12キーを押して、emacsを内部で実行するように構成しました。必要に応じて、emacsでコンパイルできます。

C ++でコーディングされたグラフィカルユーザーインターフェイスアプリケーションの場合は、Qtの使用方法を学びます。

PS。Linuxは、他のシステムよりもはるかにコマンドライン指向です。私たちを信じてください、これには信じられないほどの強みがあります。ただし、Microsoftが販売しているシステムなど、他のシステムでの作業方法は異なります。

PS。IDEが好きなら、 geanyanjutakateを検討することができます。ただし、一般的なLinuxディストリビューション(Debian、Ubuntu、Fedoraなど)のCまたはC ++でコーディングされたいくつかのフリーソフトウェアは、これらを使用して(または、LinuxではJava開発に関連することが多いEclipseを使用して)構築されます。私見、これは重要です。

于 2012-09-10T01:00:57.967 に答える