• 在Windows上编译PWLib


    在Windows上编译PWLib

    本文来自:http://www.cnblogs.com/yedaoq/archive/2011/02/22/1960866.html

    原文:http://www.voxgratia.org/docs/pwlib_windows.html#download

    1. 介绍

    本文所介绍的在Windows上编译PWLib的过程与OpenH323站点上介绍的编译过程是类似的。本文档为MSVC6和VS.NET2003下的编译过程提供了详细的描述。

    2. 前提

    一. VC6,VS2003,VS2005或VC++2005 Express Edition。注意不可使用VS2003的免费版本(对不通过GUI配置编译器的支持不完善),可以使用VC++2005 Express Edition

    二. PWLib源码,可从此处下载 : http://sourceforge.net/project/showfiles.php?group_id=80674

    三. 一个能正确处理行结束字符的解压工具,例如WinZIP

    3. 下载和安装PWLib源码

    略。要强调一点,必须使用可正确处理行结束字符的解压工具(强烈推荐WinZIP),否则将在接下来的阶段中遇到问题。

    4. 编译准备工作

    首次编译PWLib之前,必须做一些工作。

    4a. 安装GNU bison

    PWLib编译中必须用到GNU bison工具。大多数情况下不需要用到GNU flex,除非你需要重新编译 “asnparser”以更改 OpenH323的ASN文件。为方便起见,我们已将这两个工具打包,而没有分开提供。

    下载:http://www.voxgratia.org/bin/flexbison.zip

    安装:将工具解压到“C:\”,这将创建一个包含flex.exe和bison.exe的“C:\TOOLS”文件夹,以及一个包含bison.simple和bison.hairy的“C:\TOOLS\SHARE”文件夹。

    注意:不要尝试将bison安装到别的目录,虽然可以那么干,但不值当。

    将目录“C:\TOOLS”添加到IDE的“Executable Directories”中:

     

    图表 1 MSVC 6

     

    图表 2 VS.NET

    4b. 核对VC++头文件

    若使用VC6以外的编译器,请忽略此步骤。

    VC6自带的STL头文件有几处缺陷。这些缺陷可能导致应用程序崩溃,例如PWLib这类依赖静态全局变量的正确行为的程序。幸运的是,STL库的前任作者已经推出部分文件的新版本以纠正那些最致命的问题。

    PWLib包含一个程序,它会检查机器上的VC6头文件,并在必要时更新某些文件。该程序的位置是: installdir/MSVC_UPGRADE.BAT

    如果你的压缩包中不包含此文件,请从 http://www.voxgratia.org/releases/msvc6chk.zip 下载,并通过命令行命令“msvc6chk upgrade”启动msvc6chk程序。

    对每一个需要更新的文件,程序都会要求您确认。如果没有适当的理当,建议您更新全部此类文件。

    更多信息请参考:http://www.dinkumware.com/vc_fixes.html

    5. 配置目录

    installdir\PWLIB\INCLUDE 添加到VC的 Include 目录列表

    installdir\PWLIB\LIB 添加到VC的 Executable目录列表

    installdir\PWLIB\LIB 添加到VC的 Library目录列表

    6. 安装PWLib的可选包

    PWLib编译时会自动检查主机上的已安装包。在开始编译之前,请从以下列表中选择所需要的并安装。

    6a. OpenSSL

    提供加密和验证支持,建议您使用预编译的二进制发行包,此处可下载:http://www.slproweb.com/products/Win32OpenSSL.html  

    6b. Expat

    提供XML支持,若需要使用Voice XML(VXML)和XMPP功能的话,则此库是必要的。此处有可用的预编译的二进制文件包:http://sourceforge.net/project/showfiles.php?group_id=10127 

    6c. OpenLDAP

    提供LDAP协议(用于ILS和其它网络服务中)支持。OpenLDAP需要安装OpenSSL。OpenLDAP的编译细节在此:http://www.voxgratia.org/docs/windows_openldap.html ,也可以使用预编译库:http://www.voxgratia.org/bin/openldap-2.1.17_bin.zip

    主页: http://www.openldap.org
    CVS 位置(仅包含新项目文件):http://cvs.sourceforge.net/viewcvs.py/openh323/pwlib/tools/openldap-2.1.17-win32.zip

    6d. SDL

    提供Windows上的快速视频渲染支持。参见主页:http://www.libsdl.org/

    6e. IPV6

    VS.NET已包含IPV6支持。

    Win2000和WinXP下的VC6可支持IPV6,请参考:http://www.voxgratia.org/docs/windows_ipv6.html  

    6f. MicroSoft Speech API

    提供“文本-语音转换”功能,请参考http://www.microsoft.com/speech/download/sdk51 

    6g. DNS resolver

    在DNS MX和SRV纪录的解决方案中用到。

    VS.NET已包含DNS resolver的支持。

    在VC6下获得DNS resolver的最简单的方式是安装Platform SDK:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

    7. 编译

    有三个工程可用于编译:

    名称                                          描述                                            Debug                           Release

    Console                                    基础PWLib的静态库                         ptlibsd.lib                       ptlibs.lib

    PTLib                                        基础PWLib的动态库                         ptlib.lib&ptlib.dll              ptlib.lib&ptlib.dll

    2006年8月份的PWLib还包含另外一个工程:

    Console Components                 包含额外的PWLib特性,只能为静态库    ptclibd.lib                        ptclib.lib

    其中静态库可独立编译,动态库的编译需要先编译“MERGESYM”实用程序。该程序依赖于库的Release版本。

    7a. MSVC 6

    一、编译Console项目的Debug或Release版本。

    提示1:若安装了Platform SDK,可能遇到以下错误:

    Compiling...
    assert.cxx
    C:/Program Files/Microsoft SDK/include/winsock2.h(
    1218) : error C2061: syntax error : identifier 'DWORD_PTR'
    C:/Program Files/Microsoft SDK/include/winsock2.h(
    1262) : error C2146: syntax error : missing ';' before identifier 'Key'
    C:/Program Files/Microsoft SDK/include/winsock2.h(1262) : error C2501: 'ULONG_PTR' : missing storage-class or type specifiers
    ....

    遇到此问题时,请将Include目录和Lib目录中的Platform SDK目录置于VC98目录之后。

     

    提示二:

    若遇到以下错误,请参考本文4b 部分。

    PWLIB File Upgrader v1.0
    Copyright (C)
    2004 by Post Increment
    WARNING: the following file requires upgrading:
    C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\XTREE
    Please run
    "msvc6chk upgrade" to upgrade this file
    Error executing c:\winnt\system32\cmd.exe

    提示三:

    若Configurre程序找到了其它编译器目录中的参数,例如CygWin,MSys,VS2005或VS2003。请参考有关裁剪Configure搜索路径的文档:http://www.voxgratia.org/docs/faq.html#4_32

    二、编译Console Components(存在的话)。

    三、编译PWLib。首次编译ptlib.dll或ptlibs.dll时,会自动编译MERGESYM。这要求先编译Console和Console Components的Release版本。

    7b. VS2003和VS2005

    与VC6下的编译过程相同。

    8. 编译ASNParser

    使用PWLib 1.7/OpenH323 1.4及更新版本,或Janus补丁4时,可忽略此步骤。

    其它情况下,应编译PWLib中提供的ASN Parser的Release版本,否则在编译OpenH323时将遇到问题。

    9. 同时使用MSVC 6、VS2003以及VS2005

    在同一系统上使用MSVC 6、VS2003和VS2005来编译PWLib的可能性是存在的。这里有两个小窍门:

    一、切换到新的编译器之前,仅仅使用“Clean”操作来清除编译文件是不够的。尤其是此操作似乎并不清除“.pdb”文件,创建DLL时它将引发问题。一个可选的方式在新环境中开始编译之前,删除目录:

    installdir\PWLIB\LIB directory

    我更倾向于为不同的编译器使用不同的目录树,这要求每个环境都设置不同的目录。这允许更快的切换编译器,但也要求双倍的存储空间。

    二、在Console项目编译之初,PWLib运行configuration的时候,每个环境都有可能会找到并使用Microsoft SDK Lib文件和Include文件的错误版本。为避免此问题,可以使用以下环境变量来阻止Configure搜索某些文件夹中的参数:

    MSVC_PWLIB_CONFIGURE_EXCLUDE_DIRS       D:\Program Files\Microsoft Visual Studio .NET 2003

    VSNET_PWLIB_CONFIGURE_EXCLUDE_DIRS      C:\Program Files\Microsoft Visual Studio

    VSNET2005_PWLIB_CONFIGURE_EXCLUDE_DIRS  C:\Program Files\Microsoft Visual Studio .NET 2005

    请注意PWLib 1.7/OpenH323 1.14之前的版本中的configure.exe不支持这些变量。

    10. 使调试器显示PWLib类型值

    找到AUTOOEXP.DAT,在不同的环境中其位置为:

    MSVC 6 

    C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\autoexp.dat

    VS.net 2003 

    C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\Debugger\autoexp.dat

    Visual C++ Express 

    C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\autoexp.dat

    对MSVC 6,用文本编译器打开此文件并在末尾添加以下行:


    ; for PTLib
    PObject =<,t>
    PString
    =<theArray,s>
    PCharArray
    =<theArray,s>
    PContainer
    =<,t> size=<reference->size> ref=<reference->count>
    PAbstractArray
    =<,t> size=<reference->size> ref=<reference->count>
    PArrayObjects
    =<,t> size=<theArray->reference->size> ref=<reference->count>
    PIPSocket::Address
    = <v.four.S_un.S_un_b.s_b1,u>.<v.four.S_un.S_un_b.s_b2,u>.<v.four.S_un.S_un_b.s_b3,u>.<v.four.S_un.S_un_b.s_b4,u>
    PTimeInterval
    = <milliseconds>
    PTime
    = <theTime>

    对VS.NET,将上述行添加到[hresult]段之前。

    重启MSVC或VS.NET,即可在调试器中看到PWLib变量的值。

    11. 在命令行中使用VS.NET

    VS.NET编译器可通过命令行以非GUI的方式调用。若要如此,请使用“打开Visual Studio.NET 2003 命令提示符”快捷方式来打开命令窗口,或打开一个普通命令窗口并执行“vcvars32.bat”文件。

    以下命令生成Console项目的Debug版本:

    devenv /build Debug /project "Console" pwlib.sln

    以下命令生成pwlib.sln解决方案中的所有项目:

    devenv /build Debug pwlib.sln

    12. 在Windows上如何让configure停止查找错误的头文件?

    在Windows上,configure程序会搜索所有本地磁盘驱动器,查找那些指示能够启用哪些编译时选项的头文件和库文件。有时候,由于搜索了错误的目录,configure会找到一些不应该找到的文件。当本机上安装了类似CygWin或MSys之类的包时,就可能出现这种情况。
    为阻止configure尝试使用这些头文件,需要扫描过程中应忽略的目录:通过将路径添加到PWLIB_CONFIGURE_EXCLUDE_DIRS环境变量。

    另外,本文第9部分的所述的环境变量可用于定义针对各种编译环境的忽略目录。当机器上安装了多个环境时,这尤其有用。
    请注意:版本1.5之前的configure不支持忽略整个驱动器。

    在comfigure命令行上使用—exclude-dir参数也可以指定忽略目录(或包含带—exclude-env参数的目录的环境变量)。

  • 相关阅读:
    HDU4405(期望DP)
    hdu4165(简单递推,实则卡特兰数的应用)
    hdu4576(概率DP)
    期望DP(2013山东省赛)
    Nim游戏及其相关拓展
    nginx ubuntu环境下配置 path_info
    iOS 瀑布流的简单实现 UICollectionView
    ThPullRefresh (Swift 版)下拉上拉刷新
    用php搭建博客系统-待续
    面试收录-php面试题
  • 原文地址:https://www.cnblogs.com/yedaoq/p/1960866.html
Copyright © 2020-2023  润新知