2012-09-10 114 views
0

在Windows下,我安裝了MinGW和Eclipse,並使用MinGW GCC工具鏈創建了一個名爲foo的新C++項目,並編譯,運行甚至調試。精彩。Linux上的C++ hello world

仍然在Windows下,我安裝了Cygwin,一個強調我的互聯網連接的史詩事業。最終我指定了Cygwin GCC工具鏈和一個bar的項目名稱。這編譯和運行,但不能通過調試步驟(聲稱它找不到源)。

在Linux下,mint13特別安裝了Eclipse的全部歌曲全跳C++版本,並創建了一個新的C++項目,並選擇了更加鼓舞人心的baz名稱和Linux GCC工具鏈。 Eclipse抱怨它找不到iostream。

我對此感到困惑。如果我啓動一個終端窗口並運行g ++,那麼很顯然,我至少有一些GNU C++的東西。我不知道缺少什麼。 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++的使用經驗更加複雜 - 我在C++中的唯一經歷是15年前使用TurboC。

一個非常混亂的來源是用於解決庫引用的機制。

很多項目似乎都使用make,據我所知,這是一種腳本文件,用於編譯和鏈接一個項目或一組項目。 Make似乎有各種各樣的味道,似乎也有使用makefile的替代方法,以及其他替代方法。

[咒罵]真是一團糟。 @Basile - 我並不喜歡使用Eclipse,而且我非常清楚腳本優於點擊使用IDE配置的好處(其中最重要的是可以源代碼控制構建過程)。我感謝你的閱讀清單。也許這是一個愚蠢的(或過早的)問題,但我必須問:沒有像集成編輯器和構建工具的Eclipse這樣的IDE,是否可以進行逐步調試?

@bmargulies - 我同意你的觀點,工具鏈定義可能有問題,但我缺乏進行有意義的調查的背景和經驗。如上所述,我在Windows下使用不同的工具鏈獲得了不同程度的成功,所以有理由得出結論,工具鏈是問題中的重要因素。唉,我不能在Linux下選擇MinGW工具鏈。


繼規範的意見,我能夠從一個命令行編譯Foo.cpp中。hello world程序以期望的行爲執行,但我仍然不知道g ++如何在幻想IDE工具不知道如何解析iostream。

向foo添加了幾行代碼並對其進行編譯,以嘗試gdb。有用!無論誰想象你都可以通過終端窗口進行逐步調試!雖然這有點笨拙。

儘管Basile顯然不需要花哨的IDE,但這有點像說我不需要我的摩托車,因爲我可以走路。我會看看其他所提到的IDE,但我懷疑他們都會使用相同的工具鏈,因此所有人都會被我錯誤配置的任何類似東西所困擾。


巴西爾,原諒我移動球門柱。我最初的目標確實是「編譯並運行hello.cpp」,但gdb不可避免地是下一步。它的工作原理,如果這是80年代初在uni上使用電傳打字機的話,我現在可能會很開心。但這不是八十年代初期,我花了近十年的時間來處理語法着色,自動完成,變量嗅探編輯和繼續調試,所以現在我想要的是(不知所云的草皮,現在我想要的),所有的東西!

+3

使用gnu emacs代替Eclipse進行C++開發:-) – bmargulies

+0

嚴重的是,Eclipse中的工具鏈定義存在問題。 – bmargulies

+0

您只需要'g ++'在Linux上編譯C++代碼(不需要Eclipse或IDE)。但是你需要正確地調用它,學習如何使用'make'和編譯'Makefile'-s等構建器會有所幫助。因此,在編輯器(Emacs,Gedit,Geany ..)中編寫'helloworld.cpp',學會編寫'Makefile',鍵入'make'來構建程序,'helloworld'來運行它。 –

回答

2

我以前使用過eclipse c/C++版本,並且有很多相同的問題。對我而言,月食非常難以合作。我會建議使用命令行來編譯啓動的c/C++程序。在我看來,理解如何創建可執行文件更爲容易和重要。

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

會生成一個可執行文件你好。 -Wall是一個選項,可以在編譯程序時爲您提供更多警告。如果你沒有修復它們,一些警告會使你的程序崩潰,所以很高興看到它們在前面。 -g爲您提供了調試符號,以便gdb可以逐步完成程序。

當你通過使用gdb Hello進入gdb時,你可以看看這個gdb cheatsheet

一旦開始編寫具有多個源文件的程序,您將需要了解編譯中的兩個主要步驟。第一步將每個單獨的源文件轉換爲目標文件。下一步將所有目標文件鏈接在一起以創建一個可執行文件。 This link可能會解釋編譯和鏈接,顯然維基百科也是該信息的好來源。

+0

答案相同的建議即使你沒有回答Eclipse的問題,這可能是一個更有用的答案,所以你得到的榮譽。 –

+0

g ++如何知道在哪裏可以找到iostream和其他頭文件? –

+0

我改進了我的答案,以回答這個問題。 –

0

你不需要像Eclipse這樣的花哨的IDE。在Linux下開發的通常方式是使用幾種工具。

使用編輯器如emacsgedit編輯您的helloworld.cpp文件。在您的終端中鍵入emacsgedit以啓動編輯器(可能後跟helloworld.cpp即編輯文件的名稱)。

然後,編譯使用以下命令

g++ -Wall -g helloworld.cpp -o helloworld 
您在終端上鍵入

。改善你的代碼,直到沒有警告。如果您希望GCC進行優化(並且-O2-O3進一步優化),您可以在-g之後添加-O。如果您想要基準測試或發佈二進制可執行程序,您應該詢問GCC進行優化。請注意0​​知道如何鏈接標準C++庫(libstdc++.so),並且頭文件位於g ++已知的標準位置(您可以添加-v參數到g++以使其顯示正在發生的事情)。如果您想使用其他庫,則需要更多參數。

的參數的順序來g++是重要的,特別是對於-I選項(包括目錄)和-l(庫)。

如果要調試程序(避免要求的優化,以GCC),類型

gdb helloworld 

將運行調試器。瞭解更多關於gdb(當然,您可以使用gdb一步一步完成;您將首先使用next,step,break,backtrace命令gdb,而其他例如watch有時非常有用。)

如果你想沒有一個調試器中運行您的程序,只需鍵入

./helloworld 

以後,你要開發多個編譯單元的程序。學會使用像make這樣的球。還有其他的建設者程序,如omake和許多其他。

瞭解更多關於GCC(提供g++),Gnu MakeGDB(GNU調試器),EmacsGIT version control

我已經配置我的emacs按F12鍵運行make裏面。如果你願意,你可以在emacs下編譯。

對於以C++編碼的圖形用戶界面應用程序,請學習使用Qt

PS。 Linux更多的是面向其他系統的命令行。相信我們,這具有令人難以置信的優勢。但是在其他系統上(例如微軟出售的),這是一種不同的工作方式。

PS。如果你喜歡IDE,你可以考慮geany,anjuta,kate。然而,使用這些(或者在Linux上通常與Java開發相關的Eclipse)構建的典型Linux發行版(Debian,Ubuntu,Fedora,...)中很少有用C或C++編寫的免費軟件。恕我直言,這是重要的。

+0

I選擇Eclipse作爲切入點,希望它能夠在* any *平臺上編譯多個選項和路徑時具有適當的默認值。作爲Linux上的新手WRT開發人員,我最大的問題是我甚至不知道自己的無知程度,因此很難提出正確的問題。你是否告訴我,Eclipse不能給我我想要的東西,將一個罐裝配置作爲實驗學習的出發點? –

+0

是的,我告訴你不需要Eclipse(我不知道Linux上的開發人員使用它的C或C++軟件)。你最好學會一起使用幾種工具。我把它們列在我的答覆中。我在回覆中提供了幾個鏈接。 –

+0

你可以嘗試編譯一些免費軟件,從他們的源代碼樹(例如http://freecode.com/或http://sourceforge.net/上選擇)來了解它們是如何構建的。 –