2012-09-10 78 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/上选择)来了解它们是如何构建的。 –