VC6 中编译使用 pjsip 的工程

首先要正确的编译pjsip

  1. 下载、安装VC6的最新Platform SDK 。(安装的时候请不要选择注册环境变量,这样可能破坏系统的开发环境)
  2. 下载、安装Direct X SDK。
  3. 将Platform SDK 和 Direct X SDK的 include、lib路径添加到VC6中,(Tools->Options->Directories),在后边编译自己的工程的时候,如果出现错误可以尝试将路径Move到默认的路径前边
  4. 根据自己项目的运行时库设置pjsip的运行时库,例如:如果项目的运行时库为 MDd 那么pjsip的各个项目的运行库也要为 MDd,这个可以在“Project(工程)->Settings(设置)->C/C++ ->Category(Code Generation) ->User run-time Library”中看到。一定要将pjsip中的各个工程调整为和你的项目的工程一样。
  5. 以上各项都完成后,将pjsua项目设置为活动项目,然后开始编译。
  6. 编译完成后,将pjproject\pjlib\lib、pjproject\pjlib-util\lib、pjproject\pjmedia\lib、pjproject\pjnath\lib、pjproject\pjsip\lib、pjproject\third_party\lib 目录下的*.lib库文件复制到 pjproject\lib 目录下,方便统一使用

然后要设置自己的工程了

  1. 同样将Platform SDK 和 Direct X SDK的 include、lib路径添加到VC6中,(Tools->Options->Directories)
  2. 首先要添加宏定义 PJ_WIN32=1 “Project(工程)->Settings(设置)->C/C++ ->Category(General) ->Preprocessor definitions“ 中的最后添加 PJ_WIN32=1 用逗号隔开。
  3. 然后要包含pjsip头文件的目录,这里假设pjsip放在你的工程目录下(...\project\pjproject),“Project(工程)->Settings(设置)->C/C++ ->Category(Preprocessor) ->additional include directories“中添加 ”.\pjproject\pjlib\include\,.\pjproject\pjlib-util\include\,.\pjproject\pjmedia\include\,.\pjproject\pjnath\include\,.\pjproject\pjsip\include\“
  4. 设置链选项:添加一些系统库文件,在“Project(工程)->Settings(设置)->Link->Object/Library Modules“中添加”IPHlpApi.lib wsock32.lib ws2_32.lib ole32.lib dsound.lib“。
  5. 设置库文件目录:在“Project(工程)->Settings(设置)->Link->Additional Library path“中添加".\pjproject\lib\"。
  6. 源文件中添加如下语句,这里假设已经编译了release 和 debug的pjsip。
#include <pjsua-lib/pjsua.h>

#ifdef _DEBUG

#pragma comment(lib,"pjlib-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjlib-util-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjmedia-audiodev-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjmedia-codec-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjmedia-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjnath-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjsip-core-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjsip-simple-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjsip-ua-i386-win32-vc6-debug.lib")
#pragma comment(lib,"pjsua-lib-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libresample-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libspeex-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libsrtp-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libg7221codec-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libgsmcodec-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libilbccodec-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libmilenage-i386-win32-vc6-debug.lib")
#pragma comment(lib,"libportaudio-i386-win32-vc6-debug.lib")

#endif

#ifdef NDEBUG

#pragma comment(lib,"pjlib-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjlib-util-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjmedia-audiodev-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjmedia-codec-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjmedia-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjnath-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjsip-core-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjsip-simple-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjsip-ua-i386-win32-vc6-release.lib")
#pragma comment(lib,"pjsua-lib-i386-win32-vc6-release.lib")
#pragma comment(lib,"libresample-i386-win32-vc6-release.lib")
#pragma comment(lib,"libspeex-i386-win32-vc6-release.lib")
#pragma comment(lib,"libsrtp-i386-win32-vc6-release.lib")
#pragma comment(lib,"libg7221codec-i386-win32-vc6-release.lib")
#pragma comment(lib,"libgsmcodec-i386-win32-vc6-release.lib")
#pragma comment(lib,"libilbccodec-i386-win32-vc6-release.lib")
#pragma comment(lib,"libmilenage-i386-win32-vc6-release.lib")
#pragma comment(lib,"libportaudio-i386-win32-vc6-release.lib")

#endif

至此,pjsip就可以用在工程里面了,写的比较仓促,如果有遗漏的地方或问题请联系我。

2014-07-09后记:

一转眼已经离开VOIP三年半了,这三年多里有许多刚开始VOIP旅程的网友给我发mail询问pjsip的事宜,但是我离开上家公司的时候也只是刚刚开始,对pj也并没有多么深的了解,因此为了免于误人子弟,便将mail隐去了,希望这篇文章能助你将环境搭建起来,以后的事情真的是无力帮助了。

致歉。

PS。我现在做航电软件测试,感觉压力好大 >_<

posted @ 2011-02-28 14:49  CuiXS  阅读(2830)  评论(0编辑  收藏  举报