zoukankan      html  css  js  c++  java
  • [转]在 WIN32 平台下完整编译 ZeroC ICE 3.3.1

    近日,ZeroC 官方发布了最新的 Ice 3.3.1 版本,我也对其进行了完整的编译,包括其使用的第三方库的编译,现把编译过程记录在此。

    编译的环境与代码下载

    本次编译是基于 Intel x86 架构下的 Win32 平台,使用的是 Microsoft Visual Stuido 2005,其中 C++ 编译器为 msvc 8.0。

    ZeroC 官方网站上,我们可以下载到 ICE 的源代码包。我准备完全从源代码编译,所以我需要下面两个包:

    从 ICE 3.3.0 版本开始,就不在分别为各种语言准备源代码包了,而是将所有语言的代码打成一个大包,所以,我们如果打开 Ice-3.3.1.zip 这个包,将会看到不同的子目录,分别对应于:C++、C#、Java、PHP、Python、Ruby、VB。如果我们需要了解详细的编译安装说明,我们需要进入相应的语言的子目录,然后阅读里面的 INSTALL 文件。

    在第三方库源代码包里,分别是各种支持库的源代码,包括:BZip、Berkeley DB、Forms、Looks、mcpp、openssl、STLport、expat。鉴于我使用的是 MSVC 8.0 ,所以 STLport 就不需要了,而我又只准备编译 C++ 语言的环境,所以我将只用到如下的库:BZip、Berkeley DB、mcpp、openssl、expat。

    工具及环境的准备

    俗话说:磨刀不误砍柴工。在开始编译之前,我也向大家推荐几个好用的工具。

    首先是 Rapid Environment Editor,这是一个用来编辑环境变量的工具。在开发过程中,环境变量能给我们提供很大的方便,比如我们将所有头文件的搜索路径可以放到 INCLUDE 环境变量中,库文件的路径放到 LIB 环境变量中等等。但 Windows 默认提供的环境变量编辑实在是太难用了,所以推荐使用这样的工具来使我们的编译生活更加舒适。

    env-editor

    在使用这个环境变量编辑器时,我建议我们将所有自己定义的环境变量都加到用户部分,而不去影响系统部分(也就是编辑器的右边)。建议增加的环境变量有 PATH、INCLUDE、LIB。每次改变了环境变量,我们需要保存后,然后重启我们的命令行窗口,以使修改生效。

    第二个需要用到得工具是 Active Perl,因为其中的 openssl 编译需要使用 Perl 来进行环境配置。这个我们直接去其主页下载安装即可,在安装的过程中,会提示你是否将 perl 加入你的 PATH 变量中,当然,选择 YES。

    第三个工具是 Python,这个主要是为了运行 Ice 的测试程序。

    第四个工具是 ant 和 java,这个在 Ice 的安装时需要用到。要安装这个工具,首先我们需要到 java.sun.com 去下载 jre 或者 jdk,然后去 ant 的网站下载 ant 工具,这个工具是个绿色工具(java程序),随便解压到你的硬盘,然后将其 bin 的路径设置到 PATH 环境变量里。

    最后一个工具是 patch,这个我们选择 GnuWin32 项目里的 patch 工具。安装完毕后,我们需要手动将其 bin 目录加入我们的 PATH 变量中,一般来讲,这个目录是:C:\Program Files\GnuWin32\bin 。

    工具准备好了,我们要规划一下目录结构。为了方便使用,ICE 需要两个目录:

    • Ice-3.3.1-ThirdParty-VC80 - 这个目录放置第三方库的文件,其下我们需要自己建立三个子目录:bin, include, lib ,为了以后方便使用,我们可以将这三个子目录分别加入我们的 PATH, INCLUDE, LIB 环境变量中。注意目录的命名:Ice-$(VERSION)-ThirdParty-$(CPP_COMPILER)
    • Ice-3.3.1-VC80 - 这个目录我们不用预先建立,我们将Ice的安装路径设置到此,到时候会将所有需要的文件拷贝至此,其下也将创建 bin, include, lib 三个子目录,如果我们将这三个子目录也放进相应的环境变量中,则以后使用 ICE 将更加方便。其命名方式为:Ice-$(VERSION)-$(CPP_COMPILER)

    好,环境准备差不多了,我们接下来就进行编译了,所有编译均使用命令行方式(除了DB的编译),所以要使用 Visual Stuido Command Line 窗口。

    编译mcpp

    在 ThirdParty-Sources-3.3.1.zip 包中,将 mcpp-2.7.2.zip 解压到一个临时的目录下,然后:

    ] cd mpp-2.7.2\src
    ] patch -p0 < ..\noconfig\vc2005.dif
    ] nmake MCPP_LIB=1 /f ..\noconfig\visualc.mak mcpplib
    

    然后,拷贝文件:

    • mpp-2.7.2\src\mcpp.lib => $(3PARTY)\lib

    编译bzlib

    在 ThirdParty-Sources-3.3.1.zip 包中,将 bzip2-1.0.5.tar.gz 解压到一个临时目录下,同时,将 bzip2 目录也解压到同级临时目录下,这个目录里包括了补丁和修改过的 Makefile。然后:

    ] cd bzip2-1.0.5
    ] patch -p0 bzlib.h < ..\bzip2\bzlib.patch
    ] nmake /f ..\bzip2\Makefile.mak
    

    然后,拷贝文件:

    • bzip2-1.0.5\bzlib.h => $(3PARTY)\include
    • bzip2-1.0.5\bzip2.dll => $(3PARTY)\bin
    • bzip2-1.0.5\libbz2.lib => $(3PARTY)\lib

    安装expat

    对于 expat 库,ThirdParty-Sources 包里提供的是安装程序,我们直接执行它,会在 Program Files 目录里创建 Expat 2.0.1 目录,我们进入该目录,直接拷贝文件:

    • Bin\libexpat.dll => $(3PARTY)\bin
    • Bin\libexpat.lib => $(3PARTY)\lib
    • Source\lib\expat.h => $(3PARTY)\include
    • Source\lib\expat_external.h => $(3PARTY)\include

    编译openssl

    解压 ThirdParty-Sources 包里的 openssl-0.9.8g.tar.gz 到临时目录下,然后对齐进行编译,这个需要 Perl 和 汇编编译器,我们的 Visual Stuido 2005 里应该带了 MASM ,所以无需重新安装,你可以调用 ml 来尝试是否有该编译器。编译过程如下:

    ] cd openssl-0.9.8g
    ] perl Configure VC-WIN32 --prefix=C:/openssl-tmp
    ] ms\do_masm
    ] nmake /f ms\ntdll.mak
    ] nmake /f ms\ntdll.mak test
    ] nmake /f ms\ntdll.mak install
    

    注意,在填写 prefix 时,目录分隔符必须使用反斜杠’/',如果使用’\',则编译会报错。

    然后,会在安装目录(这里是C:\openssl-tmp)里同样生成 include, bin, lib 三个目录,将这三个目录直接覆盖到我们的 $(3PARTY) 目录下即可。

    编译 Berkeley DB

    解压 ThirdParty-Sources 包里的 db-4.6.21.NC.zip 到临时目录下,并将包里 db 目录下的补丁文件也解压到 db-4.6.21.NC 目录下,然后执行:

    ] cd db-4.6.21.NC
    ] patch --binary -p0 < patch.4.6.21.1
    ] patch --binary -p0 < patch.4.6.21.2
    ] patch --binary -p0 < patch.4.6.21.3
    ] patch --binary -p0 < patch.4.6.21.15663
    

    注意,在打补丁的时候,由于补丁制作有点问题,所以这里我们需要使用 --binary 模式,否则补丁无法成功。

    接下来,使用 Visual Stuido 的 IDE 来进行编译:进入 build_windows 子目录,打开解决方案文件 Berkeley_DB.dsw。这是老版本的工程文件,所以会询问你是否转换,选择“是”,然后从编译配置中选择我们需要的“Release x86”,在 build_all 项目上右键点击,选择“build”即可完成编译。

    编译结束后,拷贝文件:

    • build_windows\db.h => $(3PARTY)\include
    • build_windows\db_cxx.h => $(3PARTY)\include
    • build_windows\Release\libdb46.lib => $(3PARTY)\lib
    • build_windows\Release\libdb46.dll => $(3PARTY)\bin
    • build_windows\Release\*.exe => $(3PARTY)\bin

    开始编译Ice

    支持库终于编译完成(这些只是 C++ 环境需要的),我们开始编译 Ice 库。

    将 Ice-3.3.1 解压到临时目录下,编辑 Ice-3.3.1\cpp\config\Make.rules.make 文件:

    #
    # Select an installation base directory. The directory will be created
    # if it does not exist.
    #
    prefix = E:\win\lib\Ice-$(VERSION)-VC80
    
    #
    # Define OPTIMIZE as yes if you want to build with
    # optimization. Otherwise Ice is build with debug information.
    #
    OPTIMIZE = yes
    
    #
    # Specify your C++ compiler. Supported values are:
    # VC60, VC80, VC80_EXPRESS, VC90, VC90_EXPRESS, BCC2007, BCC2009
    #
    !if "$(CPP_COMPILER)" == ""
    CPP_COMPILER		= VC80
    !endif
    #
    # If third party libraries are not installed in the default location
    # or THIRDPARTY_HOME is not set in your environment variables then
    # change the following setting to reflect the installation location.
    #
    !if "$(CPP_COMPILER)" == "VC80_EXPRESS"
    THIRDPARTY_HOME_EXT	= VC80
    !elseif "$(CPP_COMPILER)" == "VC90_EXPRESS"
    THIRDPARTY_HOME_EXT	= VC90
    !else
    THIRDPARTY_HOME_EXT	= $(CPP_COMPILER)
    !endif
    
    !if "$(THIRDPARTY_HOME)" == ""
    THIRDPARTY_HOME = E:\win\lib\Ice-$(VERSION)-ThirdParty-$(THIRDPARTY_HOME_EXT)
    !endif
    
    #
    # For VC80 it is necessary to set the location of the manifest tool.
    # This must be the 6.x version of mt.exe, not the 5.x # version!
    #
    !if "$(CPP_COMPILER)" == "VC80"
    MT = "$(VS80COMNTOOLS)bin\mt.exe"
    !else
    MT = mt.exe
    !endif
    

    主要修改三个配置:第三方库的目录、安装的目录和是否启动Release版本编译。

    在讲第三方库的bin, include, lib目录分别设置进 PATH, INCLUDE, LIB 环境变量后,执行:

    ] cd Ice-3.3.1\cpp
    ] nmake /f Makefile.mak
    ] allTests.py
    ] nmake /f Makefile.mak install
    

    注:我在执行 allTests.py 的时候有个异常,不清楚是怎么回事,不过不影响使用。在 install 的时候会使用到 ant 工具,所以需要先安装 java + ant。参考前面介绍工具准备一节。

    至此,Ice 3.3.1 的 C++ 环境已经编译安装好了,我们需要将 Ice-3.3.1 以及其第三方库的 bin, include, lib 路径放入 PATH, INCLUDE, LIB 环境变量中,即可使用 C++ 版本的 Ice 3.3.1 了。

    通过环境变量编辑器软件来管理你的环境,使得环境设置很方便:

    env

    转自老所的blog http://blog.ipattern.org/archives/874

  • 相关阅读:
    清除大文本中的html标签
    页面中富文本的使用
    artDialog的几种基本使用
    SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]
    Struts2
    js中window.location的用法
    keycode键盘 按键
    jQuery升级踩坑之路
    生成唯一随机码的方法及优缺点分析
    百度API的经历,怎样为多个点添加带检索功能的信息窗口
  • 原文地址:https://www.cnblogs.com/adylee/p/1515564.html
Copyright © 2011-2022 走看看