Linux上的C ++ hello world

时间:2012-09-10 00:11:39

标签: linux eclipse g++

在Windows下,我安装了MinGW和Eclipse,并使用MinGW GCC工具链创建了一个鼓舞人心的名为foo的新C ++项目,并编译,运行甚至调试。精彩。

仍然在Windows下,我安装了Cygwin,这是一个强调我的互联网连接的史诗般的事业。最后我指定了Cygwin GCC工具链和bar的项目名称。这编译并运行但无法通过调试执行(声称无法找到源)。

在Linux下,特别是mint13,我安装了全能的全能C ++版Eclipse和所有装饰,并创建了一个新的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。我在Windows工作站上设置了SAMBA并使用了Textpad,因为我有足够的知识而不必学习使用新的文本编辑器。我选择Eclipse的原因是徒劳地希望它可以提供一个集成调试器的工作基线,从中探索Linux上C ++的勇敢新世界。结合MinGW, 在Windows上提供了。

我知道这里的大问题不是工具,而是我的无知和来自不同世界的一系列期望。缺乏C ++经验使我更加复杂 - 我十五年前使用TurboC的唯一经验就是使用TurboC。

混淆的一个原因是用于解析库引用的机制。

很多项目似乎都使用make,据我所知,这是一种用于编译和链接项目或项目集的脚本文件。 Make似乎有各种各样的风格,似乎还有使用makefile的替代品以及不使用makefile的替代品。

[咒骂]多么糟糕。

@Basile - 我并不喜欢使用Eclipse,而且我非常清楚脚本在点击式使用IDE配置方面的好处(尤其是你可以对源代码进行控制 - 构建过程) 。谢谢你的阅读清单。也许这是一个愚蠢(或过早)的问题,但我不得不问:如果没有像Eclipse这样的IDE将编辑器与构建工具集成在一起,是否可以进行逐步调试?

@bmargulies - 我同意你的看法,工具链定义可能有问题,但我缺乏对此进行有意义调查的背景和经验。如上所述,我在Windows下使用不同的工具链获得了不同程度的成功,因此可以合理地得出结论,工具链是问题中的一个重要因素。唉,我不能在Linux下选择MinGW工具链。


按照Norm的建议,我能够从命令行编译foo.cpp。 hello world程序以所需的行为执行,但我仍然不知道g ++如何在花哨的IDE工具没有解析iostream时知道如何解决iostream。

为foo添加了几行代码并编译它,以试用gdb。有用!无论谁想到你都可以通过终端窗口进行逐步调试!虽然这有点笨拙。

虽然Basile显然是正确的,不需要花哨的IDE,但这有点像说我不需要我的摩托车,因为我可以走路。我将看一下上面提到的其他IDE,但我怀疑他们都会使用相同的工具链,因此我所有错误配置的东西同样会受到影响。


巴西尔,请原谅我移动球门柱。我最初的目标确实是“编译并运行hello.cpp”,但gdb不可避免地是下一步。它有效,如果这是80年代早期在大学使用电传打字机,我现在可能会非常高兴。但这不是八十年代初期我在过去的十年中一直在使用语法着色,自动完成,可变嗅探编辑并继续调试所以(我是忘恩负义的)我现在想要的,好吧,一切!

2 个答案:

答案 0 :(得分:2)

之前我使用过eclipse c / C ++版本并且遇到了很多相同的问题。对我来说,eclipse非常难以使用。我建议使用命令行来编译c / c ++程序。在我看来,理解可执行文件的创建更容易,更重要。

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

将生成可执行文件Hello。 -Wall是一个选项,可在编译程序时为您提供更多警告。如果您不修复它们,某些警告会使您的程序崩溃,所以很高兴能够预先看到它们。 -g为您提供调试符号,以便gdb能够逐步完成程序。

当您使用gdb Hello进入gdb时,可以查看此gdb cheatsheet

一旦开始编写包含多个源文件的程序,您将需要了解编译中的两个主要步骤。第一步是将每个单独的源文件转换为目标文件。下一步将所有目标文件链接在一起以生成可执行文件。 This link可能会解释编译和链接,显然维基百科也是该信息的良好来源。

答案 1 :(得分:0)

您不需要像Eclipse这样的花哨IDE。在Linux下开发的常用方法是使用多种工具。

使用emacsgedit等编辑器编辑helloworld.cpp文件。在终端中键入emacsgedit以启动编辑器(可能后跟helloworld.cpp,即已编辑文件的名称[s])。

然后,使用以下命令编译

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

您在终端中输入内容。改进您的代码,直到没有给出警告。如果您希望GCC进行优化(-O-g进行优化),您可以在-O2之后添加-O3。如果要对二进制可执行程序进行基准测试或发布,您应该要求GCC进行优化。请注意g++知道如何链接标准C ++库(libstdc++.so),并且标题位于g ++已知的标准位置(您可以向{{1}添加-v参数使它显示正在发生的事情)。如果要使用其他库,则需要更多参数。

g++的参数顺序很重要,特别是g++选项(包含目录)和-I(库)。

如果要调试程序(避免要求优化GCC),请键入

-l

将运行调试器。详细了解gdb helloworld (当然,您可以使用gdb一步一步;您将使用gdbnextstepbreak命令首先是backtrace,有时候其他人 - gdb非常有用。)

如果您想在没有调试器的情况下运行程序,只需输入

即可
watch

稍后,您将需要在多个编译单元中开发一个程序。学习使用像./helloworld 这样的bulder。还有其他构建器程序,如omake和许多其他程序。

详细了解GCC(提供make),Gnu MakeGDB(gnu调试器),EmacsGIT version control

我已将emacs配置为按F12键在其中运行g++。如果您愿意,可以在emacs下编译。

对于用C ++编码的图形用户界面应用程序,请学会使用Qt

PS。 Linux比其他系统更加面向命令行。相信我们,这具有不可思议的优势。但这是在其他系统上运行的不同方式,例如微软销售的系统。

PS。如果您喜欢IDE,可以考虑geanyanjutakate。然而,在典型的Linux发行版(Debian,Ubuntu,Fedora,...)中使用这些(或使用Eclipse,在Linux上通常与Java开发相关)构建的C(C或C ++)编码很少。恕我直言,这很重要。