我是一名软件工程师,在WIndows操作系统中使用VC++,C++工作。Linux平台下的C++编程
当谈到在Linux环境下使用C++进行编码时,是否有任何重大差异。
还是只是当我们需要在Linux中使用C++进行编码时,我们必须做出一些调整。
我是一名软件工程师,在WIndows操作系统中使用VC++,C++工作。Linux平台下的C++编程
当谈到在Linux环境下使用C++进行编码时,是否有任何重大差异。
还是只是当我们需要在Linux中使用C++进行编码时,我们必须做出一些调整。
这取决于您所使用的项目类型以及您使用的本机windows API。例如,如果您使用本机Windows API处理所有事情,那么您将面临相当大的任务,因此值得让您的项目能够与Wine很好地协同工作。
在Linux环境中,您有手册页,几乎所有内容都相当详细的文档:)。如上所述,看看POSIX,虽然我推荐Qt,但它提供了很多可能想要学习Linux操作的抽象概念(例如套接字,文件系统......)
嗯,我使用了很多MFC和其他Win32 APIs – ckv 2010-05-10 11:29:49
如果您需要使您的代码平台独立,那么可以使用QT类来处理所有事情。包括读/写文件以及POSIX所提供的大部分内容。 – 2010-05-10 12:20:36
这取决于多少特定于Windows的东西,你一直在使用。 C++的标准部分是相同的,但使用它不会比命令行应用程序更进一步。
还有整个makefile-instead-of-letting-VS-build-for-you的事情。根据你决定在Linux中使用什么工具(或IDE),这可能是一个很大的区别。
我会建议使用像SCons这样的Buildsystem,它在Linux和Win32上都能很好地工作。
看看在Linux和Windows上运行的一些开源项目的源代码。通常,超过80%的代码是相同的,而且项目越大,系统特定部分越少。不幸的是,系统特定的代码中可能存在硬件部分(线程,非阻塞网络IO,GUI细节)。
有迹象表明,我能想到的一些主要区别:
Linux编程世界与您在Windows世界中熟悉的世界非常不同。你必须了解它并习惯它。一旦你明白你不会想回来。
您有许多小型/好的工具可以相互协作,而不是一体化的MSVC解决方案。例如:
在Linux中,您将编译器作为独立工具(Gnu编译器集合),您将系统构建为独立工具(autotools,CMake)。你有GNU Debugger作为独立工具,并且你有非常好的编辑器作为独立的工具(如硬核vim/emacs)。
有集成的开发环境,如Eclipse,Netbeans,KDevelop,Anjuta ,但你仍然必须了解东西的工作原理。
你应该明白,每一个单独的工具是非常强大的,并与其他人集成。
OS级API旨在简化操作。你很少会找到像bizzilion参数那样的CreateProcessEx调用,而你有简单的fork()
+ exec()
。男人是你真正的朋友在所有连接到系统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开发)...
谁是用来为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应用程序各种各样的“ - 命令行选项”可以在那里选择),然后才能得到感觉和环境的味道。
直到你是一个经验丰富的Linux系统管理员,你可能想坚持使用新手友好的Linux发行版(比如Ubuntu)。
我已经做了不少关于这两个平台,并像他们两个,但总的来说,我发现大多数开发人员喜欢一个恨别。
我会将* nix环境描述为“极客友好”:许多优秀且非常灵活的工具可供您处置。其中一些引入了艰难的学习曲线,有些仅仅因为某种原因而被打破,但仍然很受欢迎(但是如果你愿意投入一些时间来正确地学习),奖励就会很高。实际上,即使在Windows上工作时,我也使用了许多* nix工具:vim,grep,perl等...
另一方面,Windows平台提供的Win32 API比POSIX具有更多的功能,非常好记录和支持非常好的工具。 Windows上的调试器(特别是windbg)通常比我尝试过的任何* nix调试器更强大,尽管gdb对于大多数任务来说一般都足够好。可执行程序的部署也比Linux世界更容易 - 事实上,在Linux上部署软件的唯一真正可靠的方法是发布源代码并通过config/make在客户机上构建它。
为什么这个社区wiki? – ereOn 2010-05-10 12:25:57
这个问题的更好的名字是“Windows和Linux的Windows C++程序员之间的主要区别”。 – 2010-05-10 13:15:46