unix 2 windows 的C++程式移植的一些常見問題 (轉)

worldblog發表於2007-12-06
unix 2 windows 的C++程式移植的一些常見問題 (轉)[@more@]

2 的C++移植的一些常見問題
   
 unix下的我已經記不清楚了, 總之因為原來的程式是用makefile的形式編譯的, 雖然VC也支援makefile的形式, 但是無論如何在給原來的unix的編譯器用的
 makefile是不可能直接給VC的編譯器用, 而想去了解 makefile 檔案的語法和如何實現相當的功能是一件吃力不討好的事。所以我最後在VC下用了 Console 程式的形式 來完成程式的移植工作, 當然用其它的形式如 MFC AppWized ...也是可以的, 反正對於每個程式設計師而言掌握方法以後,愛出什麼招都無所謂。
  常見問題1:
  1 副檔名, 很奇怪? 大多數的編譯器對.cpp 和 .c 檔案的處理是不一樣的,
  但是也有例外時候, 所以有時你要把.c 的改成 .cpp來用。
  2 #include "stdAfx.h" 加到 .cpp 檔案的前面, 當然不加也可以, 你只要在
  工程設定的地方說明一下該cpp檔案, not using precompiled headers 或
  Automatic use of precompiled headers;
 
  3 模板類的應用, 一般模板類的實現程式碼需要寫到.h 檔案中,或在.h中include
  .cpp 但這樣對程式設計師來說會覺得很不舒服, 用 makefile 的方式可以解決這個
  問題, 但是在VC下又不用makefile,就只有用以上的方法來修改改那些模板類
  的程式碼了,順便提一下用g++的編譯器我也是覺得用在.h中include .cpp 的方法
  好一些。
 
  4 資料型別的衝突, 重定義, 在國外的大公司在寫程式時一般都有這樣的習慣: 定義
 自己的資料型別, 如定 INT, DOUBLE, BOOL 等之類的資料型別,然後把這些定義放在  BaseType.h 之類的檔案中, 然後在時都是用自己定義的資料來完成,我認為這是一個很好的習慣, 因為你很難預料你寫的程式會在不同的平臺上跑(16位機, 32位機,  64位機...),用不同的編譯器,這樣做增強了程式的適應性, 當然有時候這也會引起麻煩, 如BOOL不就是在VC中有定義嗎?這類問題在知道問題所在以後就很容易解決了。  
 
  5 變數初始化, 如這樣的程式碼 int*  pInt(NULL), 要改為 int*  pInt = (NULL);
  等如此類的修改。
 
  6 還有一種常見問題就是link過程中找不到定義或定位不到具體的實現程式碼之類的或重義的情況, 這樣情況解決就看具體的原因了, 很沒有什麼一勞永逸的方法。
 
  7 與特定的或其它的支援環境相關的方法, 這類問題的解決與移植程式要達到什麼的目標有很大的關係, 有時可能很容易的解決了, 有時又很難解決。比如有關X11也就是關於 X Window的圖形系統的,有一定的情況下可以用把X11庫拷過來, 做一下compile 可以但是要做到 link 成功, 就不容易反正在VC下我是沒有成功的把含x11應用程式link完成。

   
 以上是我在以前的做移植的工作常見的一些問題, 對於前六種情況的處理非常容易,不花多少時間就可以處理完了,這種問題都是第一次處理的時候需要花些時間,以後碰到都是照舊的方法辦就可以,第7種情況就有時就較難處理一些。 因為間隔時間較長可能還有一些內容已經忘了,另外可能還有更好的處理方法我不知道, 有什麼不對的地方還希望大家多多指正。
 
   梁 2001/05/15


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989068/,如需轉載,請註明出處,否則將追究法律責任。

相關文章