2010-05-10 40 views
4

我是一名软件工程师,在WIndows操作系统中使用VC++,C++工作。Linux平台下的C++编程

当谈到在Linux环境下使用C++进行编码时,是否有任何重大差异。

还是只是当我们需要在Linux中使用C++进行编码时,我们必须做出一些调整。

+0

为什么这个社区wiki? – ereOn 2010-05-10 12:25:57

+0

这个问题的更好的名字是“Windows和Linux的Windows C++程序员之间的主要区别”。 – 2010-05-10 13:15:46

回答

9

这取决于您所使用的项目类型以及您使用的本机windows API。例如,如果您使用本机Windows API处理所有事情,那么您将面临相当大的任务,因此值得让您的项目能够与Wine很好地协同工作。

在Linux环境中,您有手册页,几乎所有内容都相当详细的文档:)。如上所述,看看POSIX,虽然我推荐Qt,但它提供了很多可能想要学习Linux操作的抽象概念(例如套接字,文件系统......)

+0

嗯,我使用了很多MFC和其他Win32 APIs – ckv 2010-05-10 11:29:49

5
  1. 使用POSIX API而不是Win32 API。
  2. 使用gtkmm,Qt或wxWidgets代替MFC。
+0

如果您需要使您的代码平台独立,那么可以使用QT类来处理所有事情。包括读/写文件以及POSIX所提供的大部分内容。 – 2010-05-10 12:20:36

2

这取决于多少特定于Windows的东西,你一直在使用。 C++的标准部分是相同的,但使用它不会比命令行应用程序更进一步。

还有整个makefile-instead-of-letting-VS-build-for-you的事情。根据你决定在Linux中使用什么工具(或IDE),这可能是一个很大的区别。

0

我会建议使用像SCons这样的Buildsystem,它在Linux和Win32上都能很好地工作。

0

看看在Linux和Windows上运行的一些开源项目的源代码。通常,超过80%的代码是相同的,而且项目越大,系统特定部分越少。不幸的是,系统特定的代码中可能存在硬件部分(线程,非阻塞网络IO,GUI细节)。

0

有迹象表明,我能想到的一些主要区别:

  • 工具。好点和坏点。如果你习惯了Visual Studio,没有什么比这更像是可用的。每个Linux IDE都有一些问题。另一方面,特别是调试工具非常好。但总而言之,你应该从可用的东西中创建你自己的工作环境。
  • API的。文件差异很大。有些组件是有据可查的,但通常你最终会阅读源代码来弄清楚应该如何工作。另一方面,你源代码,所以最终你有所有的工具可能找出为什么不起作用。
  • 只要你记得行为并找到合适的地方,Linux编程社区通常都非常好。在某些问题上SO不是一半坏,但有时你需要找到其他地方。
  • 事情并不像你在Windows世界中学到的那样自动化。是的,有些工具允许你在没有Makefile知识的情况下创建项目,但是真的,你应该学会如何使用它们。在Windows中,更常见的是你从不用手编辑项目文件(例如Makefiles)。
  • 如果你想在内核空间(驱动程序等)工作,C是一个比C++更好的赌注,因为内核是用它编写的。
  • 我同意Qt的建议。非常好的小部件集。至少Swing(是的,我知道,这是Java)击败了。而Qt Creator并不坏。
  • 不要低估shell脚本的力量! Windows程序员已经找到了很少的东西,但是你可以用他们很多来帮助你的工作。
5

Linux编程世界与您在Windows世界中熟悉的世界非常不同。你必须了解它并习惯它。一旦你明白你不会想回来。

  1. 您有许多小型/好的工具可以相互协作,而不是一体化的MSVC解决方案。例如:

    在Linux中,您将编译器作为独立工具(Gnu编译器集合),您将系统构建为独立工具(autotools,CMake)。你有GNU Debugger作为独立工具,并且你有非常好的编辑器作为独立的工具(如硬核vim/emacs)。

    有集成的开发环境,如Eclipse,Netbeans,KDevelop,Anjuta ,但你仍然必须了解东西的工作原理。

    你应该明白,每一个单独的工具是非常强大的,并与其他人集成。

  2. OS级API旨在简化操作。你很少会找到像bizzilion参数那样的CreateProcessEx调用,而你有简单的fork() + exec()。男人是你真正的朋友在所有连接到系统API和标准C库。

  3. GUI - 你有两个大的GUI库Qt/GTK。 Qt是一个伟大的C++库,它使GUI开发变得愉快(不像MFC)。 GTK具有C和C++ API GTK和GTKmm(没有经验)。

  4. i18n/l10n/unicode - Linux编程使生活更轻松。几乎所有东西都是UTF-8。没有广泛的API废话,用简单的fopen或ifstream打开中文文件名没有问题,没有第三部分库无法打开带有Unicode名称的文件。伟大的内置工具,如gettext,以及良好的翻译工具包,如KBabel。

  5. 库 - 这是Linux编程让你讨厌Windows的地方。几乎每一个免费的图书馆都已经安装或可用简单的apt-getyum install。没有调试/释放不兼容的废话,没有DLL_EXPORT,简单的健壮,使共享对象就像处理静态库一样简单(大多数根本不使用静态库)。

我的$ 0.02

(我的Linux程序员有处理很多与Windows开发)...

0

谁是用来为Visual C++可能会发现以下几个方面典型的Windows程序员Linux C++编程新颖,或者难点:

  1. Linux编程不是linux编程,它是Unix编程。Unix编程的根源远远超过了Windows的MS-DOS根源,并且它在很多地方都显示出来。

  2. Windows程序员倾向于思考环境,他们倾向于首先考虑IDE工具(GUI编辑器,编译器,调试器)。 Unix程序员倾向于安排在各个部落,许多核心的Unix(linux)C++程序员非常愿意在没有IDE的情况下从命令行工作,而且我确信有些人在Linux上使用visual-studio风格的IDE,其中有很多。我个人发现我不得不学习如何阅读(也许编写)一个makefile,从源代码构建一堆标准的Linux/Unix应用程序各种各样的“ - 命令行选项”可以在那里选择),然后才能得到感觉和环境的味道。

  3. 直到你是一个经验丰富的Linux系统管理员,你可能想坚持使用新手友好的Linux发行版(比如Ubuntu)。

1

我已经做了不少关于这两个平台,并像他们两个,但总的来说,我发现大多数开发人员喜欢一个恨别。

我会将* nix环境描述为“极客友好”:许多优秀且非常灵活的工具可供您处置。其中一些引入了艰难的学习曲线,有些仅仅因为某种原因而被打破,但仍然很受欢迎(但是如果你愿意投入一些时间来正确地学习),奖励就会很高。实际上,即使在Windows上工作时,我也使用了许多* nix工具:vim,grep,perl等...

另一方面,Windows平台提供的Win32 API比POSIX具有更多的功能,非常好记录和支持非常好的工具。 Windows上的调试器(特别是windbg)通常比我尝试过的任何* nix调试器更强大,尽管gdb对于大多数任务来说一般都足够好。可执行程序的部署也比Linux世界更容易 - 事实上,在Linux上部署软件的唯一真正可靠的方法是发布源代码并通过config/make在客户机上构建它。