Opticks4.11+VS2010+Windows源码编译

1、通过 Subversion 下载 Opticks 源代码

Opticks 开发采用 Apache Subversion 版本管理工具,这里使用 TortoiseSVN 1.8 下载 Opticks 源代码。

1)下载并安装 Subversion 客户端 TortoiseSVN 1.8 (http://tortoisesvn.net/downloads.html)

例如:安装路径为 C:\ProgramFiles\TortoiseSVN\bin

说明:安装完成后,将自动在系统环境变量 PATH 中添加 C:\Program Files\TortoiseSVN\bin,以便识别 svn 命令。

2)在路径 C:\ProgramFiles\TortoiseSVN\bin 中新建批命令文件,例如:opticks_download.bat,输入以下内容并保存:

-------------------------------------------------------------------------------------------------------

svn checkouthttps://svn.code.sf.net/p/opticks/code/releases/4.11.0/trunk/c:\opticks-source411

-------------------------------------------------------------------------------------------------------

其中:

svn : 表示 Subversion 客户端命令

checkout : 表示下载操作

https://svn.code.sf.net/p/opticks/code/releases/4.11.0/trunk/: 表示 Opticks4.11.0 源码的网络位置

c:\opticks-source411 : 表示保存到本地位置

-------------------------------------------------------------------------------------------------------

3)运行 opticks_download.bat,自动下载 Opticks 源代码。

说明:下载的 Opticks 源码仅包括 Opticks 自身的源码,不包含依赖库的源码。

 

2、通过Apache Ivy下载 Opticks 依赖库

Opticks 采用了 Apache Ivy 依赖库管理工具,Ivy 需要 JRE 运行环境。

1)下载并安装 JRE8,地址 (http://www.oracle.com/technetwork/java/javase/downloads/index.html)

2Apache Ivy 位于 c:\opticks-source411\Dependencies 内,不需单独下载;运行 C:\opticks-source411\Dependencies\retrieve-dependencies.bat,将自动下载依赖库,依赖库保存到 C:\opticks-source411\Dependencies\ 目录下。

 

3、通过VS2010编译 Opticks

Opticks4.11 采用 VS2010进行编译,编译中需要调用 Python 命令,这里采用 ActivePython 2.7

1)下载并安装 ActivePython 2.7 (http://www.activestate.com/activepython/downloads)

例如:安装路径为C:\Python27\

说明:安装完成后,将自动在系统环境变量 PATH 中添加 C:\Python27\;C:\Python27\Scripts,以便识别 Python 命令。

2)定义依赖库目录环境变量 OPTICKSDEPENDENCIES,例如值为 C:\opticks-source411\Dependencies

 

注意1:由于 update-build-revision.py 执行时调用 svnversion 命令,编译之前必须安装Subversion 客户端。

注意2Opticks 采用了 Python2.x 语法,Python 3.x 语法有些大的变化,采用 Python 3.x 解析 update-build-revision.py 时会有问题。

 

3)打开C:\opticks-source411\Code\application\Opticks.sln文件,直接编译

说明:Opticks还提供了一系列编译配置文件,位于C:\opticks-source411\Code\application\CompileSettings\目录中。

 4)出现warning C4819警告时,使用UltraEdit将文件从UTF-8BOM格式转换为UTF-8DOM格式。

 

4、编译环境安装错误

1)在 Win7 下运行 Slik Subversion 1.8 (http://www.sliksvn.com/en/download安装程序时,出现 “Installation directory must be on a localdrive” 错误。

分析原因:Slik Subversion1.8 安装程序存在问题,不支持 Win7

解决方法:改为同类软件 TortoiseSVN

2)在 Win7 下运行 Python 2.7 (http://www.python.org/安装程序时,出现 “There is a problem with this WindowsInstaller package. A DLL required for this install to complete could not be run.Contact your support personnel or package vendor.”

分析原因:Python 2.7 安装程序存在问题,不支持 Win7

解决方法:改为同类软件 ActivePython2.7

 

5、编译错误

5.1编译错误:error MSB3073:命令python.exe"……\..\update-build-revision.py”VCEnd已退出,代码为 1

分析原因:未安装Subversion客户端工具引起。

解决方法:安装TortoiseSVN

 

5.2编译错误:File"...\update-build-revision.py",line 35

print "NewBuild Revision #is", version_number

SyntaxError:invalid syntax

分析原因:Opticks采用了Python 2.x语法,不同于Python 3.x语法,导致print命令无法编译通过。

解决方法有两种:

1)推荐:卸载Python 3.x,安装Python 2.x,若同时安装了两种版本,将使用Windows.py文件关联的版本。

2)修改update-build-revision.py等相关Python文件的语法,改动地方较多,不推荐。

说明:通过Python 3.x提供的2to3.py工具,可以将Python 2.x语法格式转换为Python3.x语法格式,但是只能转换简单的语法差异,不能转换复杂的语法差异。在cmd下直接运行的例子:

-------------------------------------------------------------------------------------------------------

pythonC:\Python33\Tools\Scripts\2to3.py-w update-build-revision.py

-------------------------------------------------------------------------------------------------------

其中:

python需要在系统环境变量Path中保存C:\Python33\路径,以保证python.exe可以执行。

C:\Python33\Tools\Scripts\2to3.py表示2to3工具

-w表示备份源文件(添加后缀.bak),并创建与源文件同名的3.x格式文件。

update-build-revision.py表示2.x格式文件

-------------------------------------------------------------------------------------------------------

 

5.3编译错误:fatal error C1083:无法打开包括文件:“BuildRevision.h”: No such fileordirectory

错误原因:update-build-revision.py编译失败,将导致该错误。

解决方法:

1)推荐:编译通过update-build-revision.py

2)注释掉它,然后#define BuildVision “tt”(随意写个吧)

 

5.4编译错误:Moc'ing *.h...系统找不到指定的路径

分析原因:moc.exe路径未正确设置。错误原因查找方法:

1)打开*.h文件的属性,通过自定义工具 -> 命令行可以查看设置的路径,发现QTBIN宏解析的路径错误。

2)查找发现QTBIN宏定义在C:\opticks-source411\Code\application\CompileSettings\Macros.props文件中,该文件未定义OPTICKSDEPENDENCIES宏。

 

解决方法有三种:

1)推荐在我的电脑增加一个环境变量OPTICKSDEPENDENCIES,值为依赖库目录C:\opticks-source411\Dependencies

该变量将被build.py调用,若未设置,产生编译错误:Script Exception: Dependencies argument mustbe provided

2)修改C:\opticks-source411\Code\application\CompileSettings\Macros.props文件,在UserMacros属性组中添加以下内容:

<OPTICKSDEPENDENCIES>$(SolutionDir)..\..\Dependencies</OPTICKSDEPENDENCIES>

这种方法的好处是宏定义不依赖于特定路径,可以将源代码拷贝到任意路径下进行编译。

注意:QTBIN宏定义中,引用其它宏的前后顺序关系,若前后顺序关系颠倒了,则QTBIN宏的解析值可能为空或错误。

3)在VS2010中添加OPTICKSDEPENDENCIES宏,值为依赖库目录C:\opticks-source411\Dependencies,设置步骤:

    a)选择VS2010菜单视图(View) ->属性管理器(Property Manager)

    b)在属性管理器中,展开目录树Opticks -> Debug | Win32->Microsoft.Cpp.Win32.user,点击右键打开属性对话框

    c)在Microsoft.Cpp.Win32.user属性页中,选择通用属性 -> 用户宏,添加宏,名称为:OPTICKSDEPENDENCIES,值为:C:\opticks-source411\Dependencies

    d)在属性管理器中,展开目录树Opticks -> Debug | x64->Microsoft.Cpp.x64.user,点击右键打开属性对话框

    e)在Microsoft.Cpp.x64.user属性页中,选择通用属性 -> 用户宏,添加宏,名称为:OPTICKSDEPENDENCIES,值为:C:\opticks-source411\Dependencies

 

说明:moc全称是 Meta-Object Compiler,也就是元对象编译器Qt程序在交由标准编译器编译之前,先要使用 moc分析 C++ 源文件。如果它发现在一个头文件中包含了宏Q_OBJECT,则会生成另外一个 C++源文件。这个源文件中包含了 Q_OBJECT宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_构成。

 

5.5编译错误:warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

分析原因:UNIX平台的UTF-8格式源代码文件包含非ASCII字符时,VS2010默认使用Gb2312格式解码导致。有时是换行符或空白符导致。

注意:这个警告最好不要禁止,因为出现这个警告的文件,就会无法设置断点

 

解决方法有两种:

1)推荐:UltraEditUTF-8BOM格式文件转换为UTF-8DOM格式文件。

2)不推荐在VS2010中直接保存,缺点是导致UTF-8格式文件中的非ASCII字符不能正确处理。

3)在Project ->Properties -> ConfigurationProperties -> C/C++ -> AdvanceDisableSpecificWarnings中添加相应的警告编号:4819

4)在出现警告文件的开始处加入语句: #pragmawarning (disable:4819)

 

说明:使用VS2010创建源代码文件时,若需要使用中文字符,推荐保存为UTF-8格式,可以跨平台编译运行。具体保存方法为:选择cpph的全部内容,菜单文件(File) -> 高级保存选项(advanced save options),选择编码方式为Unicode -codepage 1200,保存源代码文件。

若换行符或空白符导致警告C4819,解决方法:打开出现警告错误的文件,按Ctrl+A全选代码,选择菜单的 “编辑高级设定选定内容的格式,然后保存;再用VS2010的查找替换功能,打开允许正则表达式选项,选择当前窗口,查找替换 \n  \n 。查找的\n 是跨平台的回车,替换的 \n却是当前代码页的回车了。

 

5.6编译错误:error C2001:常量中有换行符

分析原因:UNIX平台的UTF-8格式源代码文件包含非ASCII字符时,VS2010默认使用Gb2312格式解码导致

解决方法有两种:

1)推荐:UltraEditUTF-8BOM格式文件转换为UTF-8DOM格式文件。

2)不推荐采用手工方式删除引起错误的非ASCII字符,将导致字符信息丢失。

3)在AppVersion.h源文件中有版权字符,虽然AppVersion.h保存为UTF-8BOM格式文件,但是其它源代码文件(UTF-8BOM格式)调用AppVersion.h中版权字符宏定义时,依然会出现错误,因此建议宏定义中不要使用非ASCII字符。以下是手工修改的例子:

AppVersion.h源文件第1519行修改为:

   #define APP_COPYRIGHT"Copyright (c) 2008, Ball Aerospace &Technologies Corp."

   #define APP_COPYRIGHT_MSG"(c) 2000 - 2008 Ball Aerospace &Technologies Corp., Fairborn,Ohio"

AppConfig.h源文件第4546行修改为:

   #define MICRONstd::string("u")

   #define DEG_CHARstd::string("*")

 

手工修改内容的文件包括:

PlugInUtilities\AppVersion.h修改版权字符

Batch\Main.cpp 修改版权字符

 

手工转换格式的文件包括:

Interfaces\AppConfig.h

Interfaces\TypesFile.h

Gui\PropertiesWavelengths.cpp

 

PlugInUtilities\Interfaces\GeoPoint.h

PlugInUtilities\GeoPoint.cpp

PlugInUtilities\StringUtilities.cpp

 

PlugIns\src\Aspam\AspamViewerDialog.cpp

PlugIns\src\DataFusion\Matrix.h

PlugIns\src\ENVI\EnviLibraryExporter.cpp

PlugIns\src\WizardItems\ZoomAndPanToPoint.cpp

 

32\include\opencollada\COLLADAFWGeometry.h

32\include\opencollada\COLLADAFWMesh.h

 

说明:Github保存了Opticks源码副本,通过https://github.com/tclarke/opticks可以下载源码。

说明:ApacheSubversion (http://subversion.apache.org/)网站可以下载Subversion源码,没有未提供可执行文件。

 

4Opticks源代码使用了UTF-8编码,由于Windows平台和UNIX平台在处理UTF-8编码文件时有差异,若源代码文件包括了非ASCII字符,在中文Windows平台上编译将出现异常错误,解决方法是使用UltraEditUTF-8BOM格式文件转换为UTF-8DOM格式文件。

具体操作:通过UltraEdit菜单"文件" ->"打开对话框,在打开方式中选择UTF-8,可以正常打开UTF-8BOM格式文件,并另存为有BOM格式文件。

注意:UltraEdit通过文件关联的方式,打开UTF-8BOM格式文件时存在问题。

 

关于UTF-8格式说明

UTF-88-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,对UTF-8编码中的任意字节,根据第一位,可判断是否为ASCII字符;根据前二位,可判断该字节是否为一个字符编码的第一个字节;根据前四位(如果前两位均为1),可确定该字节为字符编码的第一个字节,并且可判断对应的字符由几个字节表示;根据前五位(如果前四位为1),可判断编码是否有错误或数据传输过程中是否有错误。

 

UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序的问题,也因此它实际上并不需要BOM (Byte OrderMark)

 

BOM(Byte OrderMark)UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF

UNIX平台上,UTF-8格式源代码文件不要BOM签名;在中文Windows平台上,UTF-8格式源代码文件需要BOM签名,否则使用默认GB2312格式进行解码。

Unicode (UTF-8带签名) - 代码页65001

简体中文(GB2312) -代码页936,也记为CP936

 

UTF-8BOM格式转为UTF-8BOM格式的工具

1UltraEdit通过菜单文件 -> 打开对话框,在打开方式中选择UTF-8,可以正常打开UTF-8BOM格式文件,另存为有BOM格式文件。

2GNU Emacs打开UTF-8BOM格式文件时存在问题,可能需要一些设置。我选择Emacs 24.3 http://ftp.gnu.org/gnu/emacs/windows/),下载Emacs之后,解压,直接运行bin\runemacs.exe即可,运行addpm.exe可以在系统开始菜单中添加Gnu Emacs快捷方式。

3Notepad++打开UTF-8BOM格式文件时存在问题。

4Windows记事本打开UTF-8BOM格式文件时存在问题。

5VS2010编辑器打开UTF-8BOM格式文件时存在问题。

 

 参考资料:

遥感平台opticks编译总结:http://blog.csdn.net/kupepoem/article/details/8005877

Opticks源代码的编译:http://blog.csdn.net/hjh2005/article/details/7013323

Automated Python2 to 3 codetranslation: http://docs.python.org/2/library/2to3.html

Qt核心剖析: moc http://devbean.blog.51cto.com/448512/355100

UTF-8维基百科:http://zh.wikipedia.org/zh-cn/UTF-8

UTF-8文件的Unicode签名BOM(Byte OrderMark)问题:http://blog.csdn.net/thimin/article/details/1724393

C++字符串常量跨平台编译问题(与字符串编码相关)http://tianya.standsun.com/?p=569


你可能感兴趣的:(Opticks4.11+VS2010+Windows源码编译)