编译时间:2008/05/01 成功编译时间:2008/05/11
编译前先把opal、openh323、pwlib下的include 头文件包含到 visual studio 2005头文件下
注意事项:
1.当运行configure.exe进行环境配置的时候它会从c盘扫描你的目录从而注册所要编译的环境,当你后来的盘里有符合前面的配置项,它将会更新之前的配置项.
2.openh323开发包包含的源码有三个:opal、opeh323、ptlib(以前是pwlib),所以要编译它们必须把它们同时放到一个目录下,并且ptlib改名为pwlib目录,这样才能顺利编译.
编译OPENH323总结:
(一).在编译G726、GSM0610、ILBCCODEC、IMA_ADPCM、LPC_10、Speex时都会提示//#include <opalplugin.h>的错误,为了解决问题将这行代码改写为 #include "../../../include/opalplugin.h",这样这些编码的代码就可以编译通过了
(二).编译VoiceAgeG729
(1)从网上下载 G729.zip。
(2)解压后如果是文件名va_g729.h 和 va_g729.lib 则将它们更名为 va_g729a.h 和 va_g729a.lib,然后拷贝到 openh323/plugins/audio/VoiceAgeG729/va_g729目录下。
(3)重新编译VoiceAgeG729工程。
(三).编译Speex时会提示lsp.h文件不是WINDOWS格式的文件,它是MAC下的文本格式,所以应该把它转换为WINDOWS文本格式才能够编译通过
(四).编译GSMAMR时会提示AMRFILES,也就是AMR编码不的源代码不存在,但你可以在opal-v2_4_0-src.zip的源码中的opal/plugins/audio/gsm-amr路径找到相应的源代码,只要把这些源码拷贝到openh323/plugins/audio/gsm-amr再重新编译就可以编译通过了。
(五).编译OPENH323_dll时出现:LINK : fatal error LNK1104: 无法打开文件“ptclibd.lib”,要生成ptclibd.lib或ptclib.lib这两个文件,你必须编译/pwlib/src/ptlib/msos下的Console Components.dsp工程,如果觉得利用vc++6.0编译不过,你可以试着重建这个文件的一个复制版本,然后把它转换为vc++2005的格式,你就可以编译通过的了,编译它后,你可以看到ptclibd.lib或ptclib.lib
编译opal总结:
(一).在编译USB HID LID与Vic H.261 Video Codec时,如果你使用的是Visual studio 2005 express系列的编译器时,你必须安装the Microsoft Platform SDK才能编译通过,不然就会提示 fatal error C1083: Cannot open include file: 'windows.h': No such file or directory,在platform sdk里会包含这些开发包。
(二).编译EasyG729A Audio Codec里需要下载EasyG729A http://www.imtelephone.com/G729A_Eval.zip,把它解压后添加到/opal/plugins/audio/EasyCodec/EasyG729A下的文件夹里,再重新编译。
(三).编译EasyG728 Audio Codec需要下载EasyG728 http://www.imtelephone.com/G728_Eval.zip,把它解压后添加到/opal/plugins/audio/EasyCodec/EasyG728下的文件夹里,再重新编译。
(四).编译EasyG7231 Audio Codec需要下载EasyG723.1 http://www.easyconfex.com/G7231_Eval.zip,把它解压后添加到/opal/plugins/audio/EasyCodec/EasyG7231下文件夹里,再重新编译。
(五).在编译opal_static时编译precompile.cxx文件时会发现这样的一个错误:
正在编译...
precompile.cxx
D:/Program Files/Microsoft Visual Studio 8/VC/include/xlocnum(123) : error C2857: 在源文件中没有找到用/Ycptlib.h 命令行选项指定的“#include”语句,这个错误原因是这样造成的:当你在VSTUDIO里已经设置好包含的环境了,但你修改下面的形式,这样就可能会出现这样的错误提示
//#include <ptlib.h>
#include "../../../pwlib/include/ptlib.h"
(六).要成功编译opal_sample工程,因为这个工程使用了wxWidgets类,所以你必须下载一个wxWidgets源码包,并编译它。在下载完成源码后,你必须把这个源码的目录路径设置到系统的环境变量中,才能使用,如:
编译ptlib(new name)/pwlib(old name)总结:
(一).编译pwlib时要应用到GNU bison所以你必须下载这个bison http://www.voxgratia.org/bin/flexbison.zip,解压到c:盘,把解压出来的目录tools包含到vc++的VC++ Directories 下的executable files中(你可以查看解出来的ReadMe.txt)文件),如:
(二).把下来的两个设置设置到VC++环境中
Add installdir/PWLIB/INCLUDE to the Include directory list
Add installdir/PWLIB/LIB to the Executable directory list 这个是为了包含 MergeSym.exe文件,而这个文件需要编译MergeSym工程的release版才得到
Add installdir/PWLIB/LIB to the Library directory list
(三).当你使用的是Visual c++ 2005 express版本的编译器时,你编译PTLIB STATIC 时会遇到fatal error C1083: Cannot open include file: 'd3dtypes.h': No such file or directory这样的错误,你必须在环境中包含这个文件的地方,你需要安装directx sdk这样才能编译通过。
(四).编译ptlib 需要应用到很多环境,需要expat,openssl,SDL,openldap,directx_sdk;openldap的WINDOWS版可以到这个地址下下载:http://download.bergmans.us/openldap/
(五).编译ptlib里添加了openldap时,它要求使用ATL类库,如果你使用的是visual c++ 2005 express版本的编译器,由于它没有atl类库,所以你必须寻找这个类库,并把它包含到vc++环境中。(注:如果是使用VC++2005速成版,的编译器,那么请你换一个编译器)
(六).编译ptlib时出现“'MergeSym' 不是内部或外部命令,也不是可运行的程序”,则你应该先编译Release版。The static libraries can be built independently, but building the DLLs requires building the "MERGESYM" utility first which depends on the Release version of the libraries.我们查找一下发现,编译PTLIB的时候,它要应用到一些工具,这样工具就在PWLIB目录下的TOOLS目录下,请你先编译它们。
(七).编译时遇到"fatal error C1001: 编译器中发生内部错误。"编译的错误时,可能就是程序的源码的格式和Visual Studio不符合才这样,你可以重新整理指定的代码行的格式,这样就可能会编译通过。
(八).要使用openldap库,那么必须下载这个的源代码,并编译它组成一个lib库。编译openldap请看本目录下的OpenLDAP for win32 编译过程举例.rtf 或者直接把openldap-2.1.17_bin.zip : http://www.voxgratia.org/bin/openldap-2.1.17_bin.zip下载下来,再把包含的文件拷贝到指定的包含目录下。要自己编译openldap库,你可以下载下来两个压缩包,然后把它们解压到相同的目录。ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.1.17.tgz ; http://www.voxgratia.org/bin/openldap-2.1.17-win32.zip
(九).要使用SDL库,必须编译SDL源代码或下载现成的库。
(十).编译tools/PacketVxD需要汇编语言。
(十一).编译项目时出现"项目: error PRJ0002 : 错误的结果31 (从“D:/Program Files/Microsoft Visual Studio 8/VC/bin/mt.exe”返回)。"提示,你必须重新编译就可以编译通过。错误原因还不明确。
(十二).编译openh323_dll时会出现"openh323sd.lib(ffh263codec.obj) : error LNK2019: 无法解析的外部符号"public: virtual int __thiscall FfmpgLink::IsLoaded(void)" ([email protected]@@UAEHXZ),该符号在函数"public: __thiscall H323_FFH263Codec::H323_FFH263Codec(enum H323Codec::Direction,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int)" ([email protected]@[email protected]@[email protected]@[email protected]) 中被引用" 的错误,这是由于"/openh323/src/ffh263codec.cxx"的文件中的类FfmpgLink中的函数BOOL IsLoaded();没有编写实现方式,你可以把这个类的这个方法注释掉,直接使用基类的这个继承过来的方法。
注意:
1* 或者你没有使用expat的库也成功编译了openh323,但当你编译opal实例的时候因为需要使用OpalIVREndPoint类,而这些类的定义必须使用expat为基础,所以你必须使用expat,要使用expat库,你可以上网下载这个库的源代码,下载完成后把它编译,编译成功后,你必须把expat的目录结构修改一下(或者你可以更改pwlib的搜索目录,“搜索目录的路径结构在configure.ac文件中,这个是代码”,但在你不清楚的情况下,最好是更改expat目录结构),把expat源码包解压到/expat/source目录下,把编译出来的lib等复制到/expat/libs目录下就可以让pwlib搜索配置得到了.
编译pwlib_sample/opal_samples:
(一).要成功编译实例,因为实例的界面是应用wxWidgets作为界面,所以要编译成功,必须要成功编译wxWidgets并且包含到vc的默认目录中.
(二).编译OpenPhone的时候会出现下面的错误:
"Checking for wxWidgets
Creating C++ source from XML resource file
系统找不到指定的路径。
Project : error PRJ0019: 工具从"Creating C++ source from XML resource file""
编译所需要的配置源码库:
//---------------------
//附加
expat v2.0.1
openssl v0.9.8
SDL v1.2.13
openldap v2.1.17
MicroSoft Speech API v5.1
DirectX SDK
EasyG728
EasyG729
EasyG7231
va_g729
cyrus_sasl v2.1.15
flexbison
wxWidgets
//-----------------------
//主要
opal v2_4_0
openh323 v1_19_0_1
ptlib v1_12_0
编译成功后,需要运行实例程序,你需要做如下工作:
把下面的DLL复制到C:/WINDOWS/system32:
(运行ptlib实例的时候必须复制下面的DLL)
libexpat.dll
libsasl.dll
PTLib.dll
PTLibd.dll
(运行opal实例的时候必须复制下面的DLL和以上的DLL)
opal.dll
opald.dll
openldap.dll
SDL.dll
(运行openh323实例的时候必须复制下面的DLL和以上的DLL)
OpenH323.dll
OpenH323d.dll
原作者语:
续上一次发布的编译经历,现在更新之,这个版本应该够你用的了,因为它能通过openh323所有编译条件进行编译,不过是在windows平台下编译的,如果有人有linux下的编译版本,请发给我,我的交流e-mail是:[email protected]