VC6.0代碼轉移到CentOS下步驟

算法移植建議流程

一、            系統環境

 

1、 安裝系統

CentOS 5.5 (默認安裝即可,無需更新,更新也可)

2、 安裝編譯環境(在登陸root賬戶下,進行程序安裝;確保可以鏈接網絡,大部分程序可以網上自動安裝)

(1)      安裝C++編譯器(g++

終端輸入:yuminstall gcc gcc-c++

(2)      安裝生成makefile文件的工具autotools

終端輸入:yuminstall autoconf

終端輸入:yuminstall automake

終端輸入:yuminstall libtools

(3)      集成開發環境IDE採取系統自帶文本編輯器gedit

相關插件(linux_tools_cjs/gedit)已整理好,gedit文件夾拷貝至/home/用戶名/.gnome2下。

.gnome2是隱藏文件夾,在/home/用戶名/Ctrl+H即可出現隱藏文件)

Gedit很強大,可熟悉使用。

 

二、            Windows下工作(以PCA爲例)

 

1、 Windows下的算法程序首先修改爲windows下命令行調用的形式

命令行工程類型採取win32console Application-An application that support MFC 即可,在該工程中儘量少用MFC類,但可能不可避免,這些都可以在下一步進行消除。(PCA-M_Fusion-FusionPCA

2、 統計該工程所涉及的動態庫,將這些動態庫與工程按照原文件夾格局建立一個簡潔的、僅完成該算法的IRSAPCA。(完成統計整理工作後,大家討論一下,有些底層動態庫是公用的,可以分工合作完成,避免2個版本的可能)(PCA涉及gdalFindSameRegionDllfusionbaseonPCADllZoomDllZoomGeoDllEIGENGJCPEGtinyxmlGeneralFunction;這些庫都按照原位置進行放置)

3、 整理完成該算法程序的單獨大工程後,將該大工程,拷貝到linux下。進行下一步工作。

 

三、            Linux下工作(編譯最好在普通用戶權限下進行,即非root用戶)

 

1、 linux下,工程只需留下.h.cpp文件,其他刪除。從庫開始編譯。以ZoomDll爲例,在該文件下終端輸入:g++ -Wall ZoomDll.cpp –L../../lib/gdal/-lgdal –ldl –o ZoomDll.a   該指令是用g++編譯器,打開-Wall 編譯警告功能,編譯ZoomDll.cpp(不需要添加頭文件),添加庫文件搜索目錄–L../../lib/gdal/,添加庫-lgdal –ldl,生成名爲ZoomDll.a的靜態庫。(其他指令參看An_Introduction_to_GCC_中文.pdf

2、 所有庫編譯通過後,開始編譯程序,指令與編譯庫類似,以FusionPCA爲例,指令輸入g++ -Wall FusionPCA.cpp -L../../lib/gdal/ -lgdal -L../../M_IP_IMAGECOMPUTE/FindSameRegionDll/-lFindSameRegionDll -L../fusionbaseonPCADll/ -lFusionbaseonPCADLL -L../../M_IP_GEOMETRYTRANS/ZoomGeoDll/-L../../M_IP_GEOMETRYTRANS/ZoomDll/ -lgdal -lZoomDll -lZoomGeoDll -L../../M_BASEFORALL/EIGEN/  -leigen -L../../M_BASEFORALL/GJCPEG/  -lgjcpeg -L../../M_BASEFORALL/tinyxml/  -ltinyxml -ldl -g -o FusionPCA

3、 在編譯工程中較容易遇到的問題,替換相關類或數據類型(注意編譯器嚴格檢查大小寫)

Windows

linux

BOOL

bool

CString

char *string(#include<iostream> using namespace std):文件名用string代替,其他用char*,視情況而定

FALSE/TRUE

false/true

DWORD

Unsigned long

ZeroMemory(pBuf,dwBufBytes);

 

memset(pBuf,0,dwBufBytes);

 

還有其他函數等應用問題,可先大家討論,若已改寫就可用,若未改寫再進行改寫。

已有投影複製、刪除文件、獲得後綴名判斷數據類型、Xml讀寫、查詢等函數。若有需要可直接複製。

四、            程序規範化實現。使用autotools建立makefile,實現程序或庫的自動編譯。(該工程可以與第三步同時進行)(ZoomDll爲例)autotools詳細介紹參考使用Automake,Autoconf生成Makefile+.doc

 

1、建立一個Makefile.am文件,有如下內容

lib_LIBRARIES = libZoomDll.a        庫名稱

libZoomDll_a_SOURCES = ZoomDll.cpp    cpp文件

libZoomDll_a_LIBADD =../../lib/gdal/libgdal.a     引用庫

 

程序FusionPCA內容如下(可與上一步的命令行進行類比)

bin_PROGRAMS = FusionPCA

FusionPCA_SOURCES = FusionPCA.cpp

FusionPCA_LDADD = ../../lib/gdal/libgdal.a../../M_IP_IMAGECOMPUTE/FindSameRegionDll/libFindSameRegionDll.a../fusionbaseonPCADll/libFusionbaseonPCADLL.a../../M_IP_GEOMETRYTRANS/ZoomGeoDll/libZoomGeoDll.a../../M_IP_GEOMETRYTRANS/ZoomDll/libZoomDll.a../../M_BASEFORALL/EIGEN/libeigen.a ../../M_BASEFORALL/GJCPEG/libgjcpeg.a../../M_BASEFORALL/tinyxml/libtinyxml.a../../M_BASEFORALL/GeneralFunction/libgeneralfunction.a –ldl

 

 

2、在庫文件夾下運行autoscan,生成文件configure.scan。將AC_INIT(FULL-PACKAGE-NAME,VERSIONBUG-REPORT-ADDRESS)替換爲

 

AC_INIT(ZoomDll, 1.0, [email protected])

AM_INIT_AUTOMAKE

AC_PROG_RANLIB

然後,將configure.scan重命名爲configure.ac

3、根據Makefile.am生成Makefile文件,輸入以下命令

aclocal

autoheader

autoconf

automake --add-missing(若提示缺少文件,再輸入touch NEWS AUTHORSChangLog

4、 程序編譯通過後,輸入

./configure

./FusionPCAcjs.xml out.xml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章