[英]C++ Programming in Linux Platform
我是一名软件工程师,我在WIndows OS中使用VC ++,C ++。
在Linux环境中使用C ++进行编码时是否存在重大差异?
或者,当我们需要在Linux中使用C ++进行编码时,我们必须进行一些调整。
这取决于您所使用的项目类型以及您使用的本机Windows API。 例如,如果您使用本机Windows API进行所有操作,那么您将面临一项非常重要的任务,那么值得让您的项目与Wine完美配合。
在Linux环境中,您有手册页,几乎所有内容的详细文档:)。 如上所述,看看POSIX,虽然我推荐Qt - 它为你可能想要学习的Linux方式提供了大量的抽象(例如套接字,文件系统...)
Linux编程世界与Windows世界中熟悉的非常不同。 你必须了解它并习惯它。 一旦你明白你就不想回来了。
你有许多小/好的工具可以互相协作,而不是一体化的MSVC解决方案。 例如:
在Linux中,您有一个编译器作为独立工具(Gnu编译器集合),您将构建系统作为独立工具(autotools,CMake)。 你有GNU Debugger作为独立工具,你有很好的编辑器作为独立的工具(如硬核vim / emacs)。
有Eclipse,Netbeans,KDevelop,Anjuta等集成开发环境,但你仍然需要了解其中的工作原理。
您应该了解每个单独的工具都非常强大并且与其他工具集成。
OS Level API旨在简化。 您很少会使用bizzilion参数找到CreateProcessEx之类的调用而不是简单的fork()
+ exec()
。 man是你所有连接到系统API和标准C库的真正朋友。
GUI - 你有两个大的GUI库Qt / GTK。 Qt是一个很棒的C ++库,它使GUI开发变得令人愉快(与MFC不同)。 GTK有C和C ++ API GTK和GTKmm(没有经验)。
i18n / l10n / unicode - 这是Linux编程让生活更轻松的地方。 几乎所有东西都是UTF-8。 没有广泛的API废话,使用简单的fopen或ifstream打开中文文件名没有问题,没有第三部分库无法打开带有Unicode名称的文件。 很好的内置工具,如gettext,以及像KBabel这样的好翻译工具包。
库 - 这是Linux编程让你讨厌Windows的地方。 几乎所有的免费库都已安装或通过简单的apt-get
或yum install
。 没有调试/发布不兼容的废话,没有DLL_EXPORT,简单健壮,使共享对象就像使用静态库一样简单(并且大多数都不使用静态库)。
我的0.02美元
(我是Linux程序员,与windows开发有很多交易)...
这取决于你一直在使用多少个特定于Windows的东西。 C ++的标准部分是相同的,但使用它不会比命令行应用程序更进一步。
还有整个makefile-instead-letting-VS-build-for-you。 根据您决定在Linux中使用的工具(或IDE),这可能是一个很大的不同。
我在两个平台上都做了很多工作,并且都喜欢它们,但总的来说,我发现大多数开发人员喜欢一个并且讨厌另一个。
我会将* nix环境描述为“极客友好”:您可以使用的许多优秀且非常灵活的工具。 他们中的一些人引入了艰难的学习曲线,有些人只是因为某种原因(制作)而被打破但仍然很受欢迎,但如果你愿意投入一些时间来正确学习它们,那么奖励就会很高。 事实上,即使在Windows上工作,我也使用了许多* nix工具:vim,grep,perl等...
另一方面,Windows平台提供的Win32 API具有比POSIX更多的功能,非常好的文档和非常好的工具支持。 Windows上的调试器(特别是windbg)通常比我尝试过的任何* nix调试器都更强大,尽管gdb对于大多数任务来说通常都足够好。 可执行文件的部署也比Linux世界更容易 - 事实上,在Linux上部署软件的唯一真正可靠的方法是发送源代码并通过config / make在客户机上构建它。
我建议使用像SCons这样的Buildsystem,它在Linux和Win32上运行良好。
看一下在Linux和Windows上运行的一些开源项目的源代码。 通常,超过80%的代码是相同的,项目越大,系统特定部分往往越少。 不幸的是,系统特定的代码中可能存在硬件(线程,非阻塞网络IO,GUI细节)。
我可以想到一些主要的差异:
一个习惯于Visual C ++的典型Windows程序员可能会发现Linux C ++编程的以下几个方面是新颖的,或者很难:
Linux编程不是linux编程,而是Unix编程。 Unix编程的根源可以追溯到Windows的MS-DOS根本,它在许多地方都有所体现。
Windows程序员倾向于考虑环境,他们倾向于首先考虑IDE工具(您的GUI编辑器,编译器,调试器)。 Unix程序员往往被安排在不同的部落中,许多核心Unix(Linux)C ++程序员在没有IDE的情况下从命令行工作非常舒服,而且我确定在Linux上使用visual-studio风格的IDE,其中有一些很多。
我个人发现我必须学习如何阅读(也许写)一个makefile,从源代码构建一堆标准的Linux / Unix应用程序(并了解如何通过'autoconfiguration'和各种各样的步骤输入我的方式 - 命令-line-options“人们可以选择那里”,然后才能感受到环境的味道。
在您成为经验丰富的Linux系统管理员之前,您可能希望坚持使用新手友好的Linux发行版(如Ubuntu)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.