2015年3月24日 星期二

專案與專案資料夾相關


目前還是使用Visual C++ 2010,等到Visual C++ 2015出了後,這次真的要買正版了,並用一段長時間,因此買完後,我會將這些文章修成該版本的,並度過我這五年發文章

話不多說

我先來講一下執行檔是如何生成的





取自C++ Primer Plus 6

其實簡單來說,就像網路上面講的,他將您的*cpp or *.c,,經由Compiler編譯成一個個機器看得懂的組合語言,接著再將他和exe必要的一些startup code,及*.lib利用liner合成一個執行檔

其中startup code是一些您程式main啟動前要使用的一些東西,像是堆疊或者一些暫存器,您在PEPortable Executable)格式的檔案檔頭部分應該就是這些東西,進入main後,會是由您的*.olib的實體函式組成

簡單來說lib也是由*.o結合而成,他實際名稱是靜態函式庫(static libary),您可想說他其實就是那些*.o的函式打包在一起,成一個集合,linker會利用他們做好的方法去分析*.o*.lib,將您程式對應變數或者是函式建立關聯

換句話說就是假設你要執行A();他會找A()所在的*.o或者是*.lib,將它指向那個位置,也就是當您執行到A(),他會根據那個位置,去執行實體的程式片段,當所有關聯起來,您的程式就變成一隻完整的程式,它就一定可以執行

要是關聯不起來呢,其實你compiler就不會過,就算會過你也link不起來,您可把compilerlinker看成是一個成熟的技術,當您的程式經由他們處理完,過了,保證能動就對了


再來是資料夾相關問題,您建立一個Visual C++ CLR的專案,您在專案底下第一層,一定會有一個DebugRelease的資料夾,這是32bit編譯出來的程式會出現的地方,顧名思義,要是你選debug版本,他編譯出的程式會到debug資料夾下,release版本就會出現在release資料夾下

這兩個版本有什麼差別呢,其實就是debug版,你程式在跑時可以設置中斷點除錯,相反的release就不行,當然你要有除錯這個功能,程式一定會加入一些除錯的機制,因此編譯出的程式一定比較慢,release相對的比較快(其實快很多,你程式寫大時編譯兩種版本利用stopwatch算算看,可以很明顯的看出時間差異)

當然現在程式可以編成64bit程式,當您編出程式後,會多一個x64的資料夾,裡面一樣有debugrelease的資料夾,同32bit就不重新描述了

在下一層裡,主要是放您的程式碼跟頭檔的根目錄,從此出發,您可在該目錄下建立資料夾,管理您的程式碼或是lib檔,這個目錄下面也有debugreleasex64,裡面放的就是您編譯完的*.oVisual C++都幫您配置好了,比起Borland C++ XE7,還要自己管理您的全部檔案,方便很多

等買Visual C++ 2015再來補圖Orz

再來就要講C++的部分了

沒有留言:

張貼留言