osip2的版本:libosip2-3.1.0
官方网址:http://www.gnu.org/software/osip/
下载地址:http://www.antisip.com/download/exosip2/
编译环境:Windows XP ,VS2008, Windows Server 2003 Platform SDK SP1(有个错误原因与此有关)
开始编译:
用 VS 2008 打开 %osip2%\platform\vsnet\osip.sln 。解决方案包含两个项目:osip2 和 osipparser2。
首先是编译 osipparser2 出现问题:
1>osipparser2.def : error LNK2001: unresolved external symbol MD5Final
1>osipparser2.def : error LNK2001: unresolved external symbol MD5Init
1>osipparser2.def : error LNK2001: unresolved external symbol MD5Update
1>Debug DLL\osipparser2.lib : fatal error LNK1120: 3 unresolved externals
找到osipparser2.def ,发现输出函数名不对,MD5Final,MD5Init,MD5Update这三个输出函数其实应该为:osip_MD5Update ,osip_MD5Final,osip_MD5Init ,改正后编译,错误消失。
其次编译 osip2 的时候,总是提示下面的错误信息:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\prsht.h(666) : error C2016: C 要求一个结构或联合至少有一个成员
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\prsht.h(666) : error C2061: 语法错误 : 标识符“NMHDR”
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\prsht.h(668) : error C2059: 语法错误 : “}”
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\windows.h(238) : warning C4193: #pragma warning(pop) : 没有匹配的“#pragma warning(push)”
仔细分析之下,发现这个错误是由于包含了 "osip2/internal.h" 所致。而 “osip2/internal.h” 内则又包含了 windows.h 标准头文件。经过若干次的修改、编译、失败的过程,偶然发现 internal.h 中有个 _WIN32_WINNT 编译开关,并且条件是 >= 0x0500 的。于是在解决方案资源管理器中的osip2项目上点右键选属性,选中 配置属性-C/C++-预处理器,编辑右边的预处理器定义列表,将 _WIN32_WINNT 行改为 _WIN32_WINNT=0x0500 。按确定关闭属性对话框。再编译 osip2,顺利通过……
(落鹤生) |