VC6.0代码转移到CentOS下步骤

来源:互联网 发布:卓知中华好字通价格 编辑:程序博客网 时间:2024/05/21 11:37

算法移植建议流程

一、            系统环境

 

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 -oFusionPCA

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, haojknm@126.com)

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

原创粉丝点击