簡體   English   中英

Linux平台下的C ++編程

[英]C++ Programming in Linux Platform

我是一名軟件工程師,我在WIndows OS中使用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. OS Level API旨在簡化。 您很少會使用bizzilion參數找到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,簡單健壯,使共享對象就像使用靜態庫一樣簡單(並且大多數都不使用靜態庫)。

我的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 Studio,那么就沒有什么比這更好的了。 每個Linux IDE都存在一些問題。 另一方面,特別是調試工具非常好。 但總而言之,您應該根據可用的方式創建自己的工作環境。
  • 蜜蜂。 文檔差異很大。 有些組件已有詳細記錄,但通常最終會閱讀源代碼以確定某些內容應該如何工作。 在另一方面,你源代碼,這樣最終你擁有所有的工具可能要弄清楚為什么有些東西不能工作。
  • Linux編程社區通常非常好,只要你記得行為並找到合適的地方。 在某些問題上,SO並不是壞事,但有時你需要找到其他地方。
  • 事情並不像你在Windows世界中學到的那樣自動。 是的,有些工具允許您創建沒有Makefile知識的項目,但實際上,您應該學習如何使用它們。 在Windows中,您永遠不會手動編輯項目文件(例如Makefile)。
  • 如果你想在內核空間(驅動程序等)中工作,那么C是比C ++更好的選擇,因為內核是用它編寫的。
  • 我同意人們建議Qt。 非常好的小部件集。 至少擊敗Swing(是的,我知道,這是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'和各種各樣的步驟輸入我的方式 - 命令-line-options“人們可以選擇那里”,然后才能感受到環境的味道。

  4. 在您成為經驗豐富的Linux系統管理員之前,您可能希望堅持使用新手友好的Linux發行版(如Ubuntu)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM