在Linux平台上进行C++编程

4

我是一名软件工程师,主要在Windows操作系统中使用VC++和C++进行开发。

在Linux环境下编写C++代码是否存在重大差异?

还是只需要在需要在Linux中编写C++代码时进行一些调整即可?


这个问题更好的名称是“Windows C++程序员在Windows和Linux之间的主要区别”。 - Warren P
9个回答

9
这取决于你曾经从事的项目类型和使用的本地Windows API。例如,如果你在所有方面都使用了本地Windows API,则需要进行相当大的任务,因此最好使你的项目与Wine良好地配合工作。
在Linux环境中,你可以使用man手册,几乎包含了所有详细的文档:)。如上所述,看看POSIX,并且虽然我建议使用Qt-它为你可能想要学习的Linux方式提供了很多抽象(例如套接字,文件系统...)

我经常使用相当多的MFC和其他Win32 API。 - ckv

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

如果您需要使您的代码跨平台,使用QT类来完成所有操作可能会更简单。包括读写文件和POSIX提供的许多功能。 - Mattias Nilsson

4

在Linux编程世界中,与Windows世界您熟悉的那种方式非常不同。您必须理解并习惯它。一旦您理解了它,就会不想回来。

  1. 您有许多小而好的工具,这些工具彼此配合使用,而不是一个MSVC解决方案。例如:

    在Linux中,您有一个作为独立工具的编译器(Gnu编译器集合),您有一个作为独立工具的构建系统(autotools、CMake)。您有GNU调试器作为独立工具,还有非常好的编辑器作为独立工具(如hard core vim/emacs)。

    虽然有集成开发环境如Eclipse、Netbeans、KDevelop、Anjuta,但仍需理解其工作原理。

    您应该明白每个分开的工具都非常强大,并与其他工具集成。

  2. 操作系统级API的设计是简单的。您很少会发现像CreateProcessEx那样有数不清的参数,而是有简单的fork()+exec()。man手册是您在所有涉及系统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-ing,简单而强大,制作共享对象就像使用静态库一样简单(大多数根本不使用静态库)。

我的看法

(我是一个与Windows开发有很多交集的Linux程序员)...


2

这取决于你使用了多少与Windows相关的内容。C++的标准部分是相同的,但仅使用它不会让你比命令行应用程序更进一步。

还有整个makefile而不是让VS为您构建的事情。根据您在Linux中决定使用的工具(或IDE),这可能会有很大的区别。


1

我在两个平台上都有相当多的工作经验,并且喜欢它们两个,但总的来说,我发现大多数开发人员喜欢其中一个并讨厌另一个。

我会将*nix环境描述为“极客友好型”:您可以使用许多出色且非常灵活的工具。其中一些工具会引入较高的学习曲线,而有些则仅仅因为某种原因(如make)而仍然很受欢迎,但如果您愿意花些时间来适当地学习它们,那么回报是很高的。实际上,即使在Windows上工作时,我也使用许多*nix工具:vim、grep、perl等。

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


0
我建议使用像SCons这样的构建系统,它在Linux和Win32上都非常好用。

0

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


0

我能想到一些主要的区别:

  • 工具。优点和缺点。如果您习惯使用Visual Studio,那么没有类似的工具。每个Linux IDE都有一些问题。另一方面,特别是调试工具非常好。但总的来说,您应该从现有的内容中创建自己的工作环境。
  • API文档各不相同。有些部件有很好的文档,但通常你最终还是要阅读源代码才能弄清楚它们的工作原理。另一方面,你源代码,所以最终你拥有了解决为什么某些东西不起作用的所有工具。
  • 只要你记得规矩并找到正确的地方,Linux编程社区通常非常友好。在某些问题上SO并不半斤八两,但有时候你需要找到其他地方。
  • 事情并不像你在Windows世界中学到的那样自动化。是的,有些工具允许您在不了解Makefile的情况下创建项目,但实际上,你应该学会如何使用它们。在Windows中,你很少手动编辑项目文件(例如Makefiles)。
  • 如果您想在内核空间(驱动程序等)工作,C比C ++更好,因为内核是用C编写的。
  • 我同意那些建议Qt的人。非常好的窗口小部件集。至少在Swing方面(是的,我知道,这是Java),Qt要好得多。而且Qt Creator也不错。
  • 不要低估Shell脚本的威力!很少有Windows程序员发现这一点,但你可以用它们做很多事情来帮助你的工作。

0

一个典型的Windows程序员,习惯于使用Visual C++,可能会发现Linux C++编程的以下方面是新颖或困难的:

  1. Linux编程不是Linux编程,而是Unix编程。Unix编程的根源比Windows的MS-DOS根源要深得多,在许多地方都能看到这一点。

  2. Windows程序员倾向于考虑环境,他们往往首先考虑IDE工具(GUI编辑器、编译器、调试器)。Unix程序员往往分为各种部落,许多核心Unix(Linux)C++程序员非常习惯在没有IDE的情况下从命令行工作,有些人则使用类似于Visual Studio风格的Linux IDE,其中有许多种。

  3. 我个人发现,在获得感觉和环境氛围之前,我必须学会阅读(也许是写)makefile,从源代码构建一堆标准的Linux/Unix应用程序(并理解如何通过步骤“自动配置”和各种“--命令行选项”进行输入),

  4. 除非你是经验丰富的Linux系统管理员,否则你可能希望坚持使用适合新手的Linux发行版(如Ubuntu)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接