VS2013编译eXosip2-4.1.0

1、代码下载
   http://www.antisip.com/download/exosip2/
       libeXosip2-4.1.0.tar.gz
       libosip2-4.1.0.tar.gz
   http://c-ares.haxx.se/
       c-ares-1.11.0.tar.gz

2、将压缩包解压缩后,代码放在同一个目录。
   也就是libosip2-4.1.0、libeXosip2-4.1.0、c-ares-1.11.0是同级别的目录。
   比如:
       src
          libosip2-4.1.0
          libeXosip2-4.1.0
          c-ares-1.11.0
   将目录改名成下面的形式
       libosip2-4.1.0->osip
       libeXosip2-4.1.0->eXosip
       c-ares-1.11.0->c-ares
   新目录结构如下:
       src
          osip
          eXosip
          c-ares

3、打开解决方案
   libosip2-4.1.0等默认的几个工程是VS2012的工程。
   使用VS2013打开eXosip\platform\vsnet\eXosip.sln解决方案后,
   会弹出[升级VC++编译器和库]的窗口。点击确定后,工程会自动升级到VS2013。

4、编译
   由于eXosip依赖于libcares、osip2、osipparser2这3个库。所以直接编译eXosip即可。

5、修改编译错误
   Win7系统可能会出现如下编译警告:
   osip\include\osipparser2/internal.h(71): warning C4067: 预处理器指令后有意外标记 - 应输入换行符
   osip\include\osip2/internal.h(163): warning C4067: 预处理器指令后有意外标记 - 应输入换行符

   修改如下:
   osip/include/osip2/internal.h和osip/include/osipparser2/internal.h
   add start和add end中间部分为添加代码

   #if (_MSC_VER >= 1700) && !defined(_USING_V110_SDK71_)
   #include <winapifamily.h>
   // add start 增加WINAPI_FAMILY_ONE_PARTITION定义
   /* Macro to determine if only one partition is enabled from a set */
   #define WINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY & PartitionSet) == Partition)
   // add end
   #endif

   exosip\src\eXtransport.h(44): fatal error C1083: 无法打开包括文件: “openssl/opensslv.h”: No such file or directory
   配置属性->C/C++->预处理器->预处理器定义,删除HAVE_OPENSSL_SSL_H。Debug配置和Release配置都要删除。

   ..\..\..\exosip\src\eXtl_udp.c(55): fatal error C1083: 无法打开包括文件: “tsc_socket_api.h”: No such file or directory
   配置属性->C/C++->预处理器->预处理器定义,删除TSC_SUPPORT。Debug配置和Release配置都要删除。

6、修改编译警告、错误后继续编译
   Debug版本编译会生成如下文件:
   eXosip\platform\vsnet\v120\Win32\Debug\
       eXosip.lib
       libcares.lib
       osip2.lib
       osipparser2.lib
   Release版本编译会生成如下文件:
   eXosip\platform\vsnet\v120\Win32\Release
       eXosip.lib
       libcares.lib
       osip2.lib
       osipparser2.lib


7、测试程序的编译和错误修改
   测试程序代码可以参考下面博客:
   http://www.cnblogs.com/qq1269122125/tag/eXosip2/
   这个博客使用的是linux,如果在Windows下写代码,需要自己修改一下,把linux的头文件去掉,加入Windows的头文件。
   比如
   //#include <arpa/inet.h>
   //#include <sys/types.h>
   //#include <sys/socket.h>
   #include <WinSock2.h>

   测试工程建立,代码写好后,注意头文件的目录要在[附加包含目录]中设置,
   链接器[附加依赖项]的设置:ws2_32.lib;Dnsapi.lib;osip2.lib;osipparser2.lib;libcares.lib;eXosip.lib;
   [附加库目录]也需要根据实际情况设置。

   以上内容设置完成后,开始编译,我在编译过程中遇到了如下错误:

   错误类型1:
   eXosip2-4.1版本中,eXosip_init、eXosip_listen_addr等函数
   需要一个struct eXosip_t *excontext的参数,定义一个这个类型的变量,当作函数参数即可。
   需要修改的函数较多,不一一列举,参照编译错误修改即可。

   错误类型2:
   LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义
   这样类似的错误有一大堆,解决方法如下:
   配置属性->C/C++->代码生成->运行库->多线程调试 DLL (/MDd) 改为 多线程调试 (/MTd)

   错误类型3:
   error LNK2019:无法解析的外部符号_ares_getplatform,该符号在函数_get_DNS_Registry中被引用。
   解决方法:
   把ares_platform.h和ares_platform.c加入libcares工程,重新编译libcares。

   错误类型4:
   error LNK2019:无法解析的外部符号_ares_create_query,该符号在函数_ares_query中被引用。
   把ares_create_query.c加入libcares工程,重新编译libcares。

   错误类型5:
   error LNK2019:无法解析的外部符号_DnsQueryConfig@24,该符号在函数_eXosip_dnsutils_naptr中被引用。
   解决方法:
   如果附加依赖项没有Dnsapi.lib,则会有该警告,添加Dnsapi.lib后即可消除。
   DnsQueryConfig是WindowsAPI。可以查msdn。

配置属性->C/C++->预处理器->预处理器定义,删除HAVE_CARES_H。Debug配置和Release配置都要删除。
看了下代码,这个属性在Windows下应该不使用也可以。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Visual Studio时,有时候可能会遇到无法识别预处理指令的情况。这通常是由于以下几个原因导致的: 1. 缺少预处理器定义:预处理指令需要根据特定的条件进行编译,而这些条件通常是通过预处理器定义来设置的。如果在项目或文件中没有正确设置这些定义,就会导致预处理指令无法被识别。你可以检查项目的属性设置或者源文件的开头是否有正确的预处理器定义。 2. 配置错误:Visual Studio支持多种配置,如Debug和Release等。每个配置都可以有自己的预处理器定义。如果你在一个配置中设置了预处理指令,但在另一个配置中却没有设置,那么在后者中就无法识别该指令。你可以检查当前使用的配置是否正确设置了预处理器定义。 3. 文件类型错误:有些文件类型可能不支持预处理指令,例如纯文本文件或非C/C++文件。如果你在这些文件中使用了预处理指令,Visual Studio就无法识别它们。确保你在正确的文件类型中使用预处理指令。 4. 编译器版本问题:不同版本的编译器对预处理指令的支持程度可能有所不同。如果你使用的是较旧的编译器版本,可能会导致某些预处理指令无法被识别。尝试升级到最新的编译器版本,或者查阅编译器文档以了解其支持的预处理指令列表。 如果你遇到了无法识别预处理指令的具体问题,可以提供更多的细节,我可以帮助你进一步解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值