C ++编程在Linux平台

我是一名软件工程师,我在Windows操作系统中使用VC ++,C ++。

在Linux环境下用C ++进行编码有什么重大的区别。

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

这将取决于您所从事的项目类型以及您使用的本机Windows API。 例如,如果你使用本机Windows API来处理所有事情,那么你将面临一个相当大的任务,那就是值得让你的项目和Wine一起工作。

在Linux环境下,你有手册页,相当详细的文件几乎所有的东西:)。 正如上面提到的,看看POSIX,而我推荐Qt – 它提供了很多抽象的东西,你可能想学习Linux的方式(例如套接字,文件系统…)

  1. 使用POSIX API而不是Win32 API。
  2. 使用gtkmm,Qt或wxWidgets而不是MFC。

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

  1. 你有许多小的/好的工具,相互合作,而不是一对一的MSVC解决方案。 例如:

    在Linux中你有一个编译器作为独立的工具(Gnu编译器集合),你已经建立了系统作为独立的工具(autotools,CMake)。 你有GNU Debugger作为独立的工具,你有非常好的编辑器作为独立的工具(如硬核vim / emacs)。

    有像Eclipse,Netbeans,KDevelop,Anjuta这样的集成开发环境,但是你仍然需要了解东西的工作原理。

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

  2. 操作系统级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废话,用简单的打开或ifstream打开中文文件名没有问题,没有第三部分库不能用Unicode名称打开文件。 伟大的内置工具,如gettext,以及良好的翻译工具包,如KBabel。

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

我的$ 0.02

(我是Linux程序员,有很多与Windows开发交易)…

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

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

我已经在两个平台上工作了很多,并且都喜欢他们,但是总的来说,我发现大多数开发人员喜欢一个而且讨厌另一个。

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

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

我会建议使用像SCons这样的工作系统,在Linux和Win32上工作得很好。

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

我可以想到一些主要的差异:

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

一个习惯于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,其中很多。

  3. 我个人发现我必须学习如何阅读(也许写)一个makefile,从源头上构建一堆标准的Linux / Unix应用程序(并且了解如何通过“autoconfiguration”和各种“–command”在这里可以选择“线路选项”),然后才能得到感觉和环境的味道。

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