gcc V-4.4.4-13版本差異

摘要:gcc V-4.4.4-13版本差異

 

  今天因為新專案的關係,把我以前寫的 Server 端系統編譯到新系統,當時我寫那套系統時是 Linux RedHat Enterprise 5.0 所用的 gcc 版本應該是3.x版本的,現在客戶端所安裝的 Server 端系統是  Linux RedHat Enterprise 6.0 所用的 gcc 版本是4.4.4-13,把系統放上去編譯後,出現一個很奇怪的錯誤,錯誤是在以前寫的一個字串元件中,主要是用來強化 C++ 所提供的 std::basic_string 物件,裡面所用到的元件是非常 Pure C++ 的東西,當中有用到一個 Method 是 vsnprintf 這是建構在 #include <cwchar> 這下面的方法,但是編譯的時候他一直把我的這方法導到 boost library 中,並且要求我一定要實做這方法,看到這訊息我就傻了,到底是怎麼回事。
 
 
  我一開始還天真的以為我的 boost library 安裝不完全,再重新抓一個 boost library 自己編譯,再安裝,結果宣告失敗,後來想想真的覺得很好笑,怎麼會想到哪裡去,上網查了一下看到的回應讓我很想大笑,回覆是 gcc 版本太新,不認得這元件,要我抓3.x版的 gcc 下來使用,我有一度還真的有這衝動想去抓 gcc 3.6 版的下來安裝,後來測試了很多方法發現 gcc 4.4.4-13 是認得 #include <cwchar> 這東西的,所以原因應該是方法改了目的了,查找了一下發現原來搬到了 #include <cstdarg>、 #include <cstring> 下面,加入這兩個元件之後,再編譯就通過了,這問題不大,也好處理,但是不知道的人真的會像我一樣,花了快 2~3 個小時再抓這問題,就為了 include 忙半天,想想微軟的東西雖然常被罵不穩,但這部份的工夫做的絕對比 C++ 那些很標準的人來的好很多。