Visual Studio 2010下编译osip及eXosip并搭建开发环境的方法
来源:互联网 发布:北风网php 百度云 编辑:程序博客网 时间:2024/04/30 15:22
到http://download.savannah.gnu.org/releases/osip/libosip2-3.6.0.tar.gz下载最新的osip库并解压。
到http://download.savannah.gnu.org/releases/exosip/libeXosip2-3.6.0.tar.gz下载最新的eXsoip库并解压。
第二步,编译osip2:
1.用VS2010打开libosip2-3.6.0/platform/vsnet/osip.sln
2.对osip2和osipparser2项目分别编译生成Debug DLL
第三步,编译eXosip2:
1. 将刚刚生成的,位于libosip2-3.6.0/platform/vsnet/Debug DLL/下的osip2.lib,osip2.dll,osipparser2.lib,osipparser2.dll文件拷贝到 libeXosip2-3.6.0\libeXosip2-3.6.0\platform\vsnet\Debug目录下
2. 用VS2010打开libeXosip2-3.6.0\platform\vsnet\eXosip.sln
3. 我们暂时用不到openSSL,所以 工程名-->右击-->属性-->配置属性-->C/C++-->预处理器-->预处理器定义里面的HAVE_OPENSSL_SSL_H宏去掉
4. 在工程名-->右击-->属性-->配置属性-->C/C++ --> 常规 --> 附加包含目录: 将osip的头文件libosip2-3.6.0\include包含进来
5. 编译,生成eXosip.lib
至此,在libeXosip2-3.6.0\platform\vsnet\Debug下生成osip2.lib,osip2.dll,osipparser2.lib,osipparser2.dll,eXosip.lib 5个文件
第四步,新建SIP通信项目
1. 工程名-->右击-->属性-->配置属性-->链接器 --> 输入 --> 附加依赖项:增加静态库引用:Dnsapi.lib;Iphlpapi.lib;Ws2_32.lib;osip2.lib;osipparser2.lib;exosip.lib;
2. 工程名-->右击-->属性-->配置属性-->C/C++ -->常规 -->附加包含目录: 将osip和eXosip的头文件libosip2-3.6.0\include,libeXosip2-3.6.0\include包含进来
3. 工程名-->右击-->属性-->配置属性-->链接器 --> 常规 --> 附加库目录:将osip和eXosip的库包含进来,libeXosip2-3.6.0\platform\vsnet\Debug, libosip2-3.6.0\platform\vsnet\Debug
4. 将之前编译完成的osip2.lib,osip2.dll,osipparser2.lib,osipparser2.dll,eXosip.lib 5个eXosip库文件放到项目下面的Debug目录下即可。
在项目编译过程中有可能会出现error LNK2019 无法解析的外部符号的错误,如下图所示。
产生这些错误是因为需要用到的一些函数在osip库在def文件中没导出。需要修改\libosip2-3.6.0\platform\vsnet目录下面的osip2.def、osipparser2.def两个文件,在文件的末尾导出这些函数,具体如下:
到libosip2-3.6.0\platform\vsnet目录下找到osip2.def和osipparser2.def文件,打开osip2.def文件,在最末尾加一行
osip_transaction_set_naptr_record @138
打开osipparser2.def文件,在文件最后添加
osip_realloc @416
osip_strcasestr @417
__osip_uri_escape_userinfo @418
保存,关闭。回到第二步重新执行即可。
至此,eXosip开发的环境已经搭建完成,下面可以直接编码执行。将eXosip开发手册上的例子放在下面以供参考。
#include <stdio.h>#include <stdlib.h>#include <WinSock2.h>#include <ws2tcpip.h> #include <eXosip2/eXosip.h>#include <string.h>#define BUFFSIZE 1024 #define DEST_CALL "sip:172.16.2.13" #define SOURCE_CALL "sip:172.16.5.30:5060"#define DEST_PORT 5061 //发送subscribe数据包int SendSubscribe(){eXosip_event_t *je;int i = 0;osip_message_t *subscribe;char tmp[BUFFSIZE];//初始化i = eXosip_init();if (i != 0){printf("Can not initialize eXosip!\n");return -1;}else{printf("eXosip_init successfully!\n");}//绑定端口i = eXosip_listen_addr(IPPROTO_UDP, NULL, 5061, AF_INET, 0);if (i != 0){eXosip_quit();printf("eXosip_listen_addr failed!\n");}else{printf("eXosip_listen_addr sucess\n");}//subscribe,发起呼叫请求i=eXosip_subscribe_build_initial_request(&subscribe, DEST_CALL, SOURCE_CALL, NULL, "SE-INFO", 3600);if(i != 0){fprintf(stderr, "Initial INVITE failed!, %s\n", strerror(errno));}else{printf("Initial INVITE sucess!\n");}snprintf (tmp, 1024,"GET:FirmwareVer\r\n" //话机的版本"GET:MacAddress\r\n" //话机的MAC地址"GET:ConfigVer\r\n" //配置文件的版本//"SET:Telnet ip=192.168.3.108 port=5060\r\n"//"SET:Reboot\r\n"); osip_message_set_body(subscribe,tmp,strlen(tmp));osip_message_set_content_type(subscribe,"application/SEM-TEXT");eXosip_lock();i=eXosip_subscribe_send_initial_request(subscribe); eXosip_unlock();while (1){je = eXosip_event_wait (0, 200); if (je == NULL) { continue; }else{switch(je->type) //可能会到来的事件类型{case EXOSIP_SUBSCRIPTION_ANSWERED: //announce a 200okprintf("收到200 OK!!\n");break;case EXOSIP_SUBSCRIPTION_NOTIFY: //announce new NOTIFY {printf("收到EXOSIP_SUBSCRIPTION_NOTIFY!\n");osip_body_t *body; osip_message_get_body (je->request, 0, &body);printf("%s\n", body->body);}break;case EXOSIP_SUBSCRIPTION_REQUESTFAILURE: // announce a request failureprintf("EXOSIP_SUBSCRIPTION_REQUESTFAILURE!\n");break;case EXOSIP_CALL_ANSWERED: //收到200 OK,表示请求已经被成功接受,用户应答printf("收到200 OK!\n");//int call_id=je->cid;//int dialog_id=je->did;printf("call_id is %d,dialog_id is %d, je_status is %s, %s\n",je->cid,je->did, je->ss_status, je->ss_reason);//回送ack应答消息//eXosip_call_build_ack(je->did,&ack);//eXosip_call_send_ack(je->did,ack);break;case EXOSIP_SUBSCRIPTION_PROCEEDING:{printf("EXOSIP_SUBSCRIPTION_PROCEEDING!\n");break;}case EXOSIP_SUBSCRIPTION_REDIRECTED:{printf("EXOSIP_SUBSCRIPTION_REDIRECTED!\n");break;}case EXOSIP_SUBSCRIPTION_SERVERFAILURE:{printf("EXOSIP_SUBSCRIPTION_SERVERFAILURE!\n");printf("call_id is %d,dialog_id is %d, je_status is %s, %s\n",je->cid,je->did, je->ss_status, je->ss_reason);break;}case EXOSIP_SUBSCRIPTION_GLOBALFAILURE:{printf("EXOSIP_SUBSCRIPTION_GLOBALFAILURE!\n");break;}case EXOSIP_IN_SUBSCRIPTION_NEW:{printf("EXOSIP_IN_SUBSCRIPTION_NEW!\n");break;}default: //收到其他应答printf("other response!\n");if (je->textinfo[0]!='/0'){printf( "(%i %i %i %i) %s", je->cid, je->sid, je->nid, je->did, je->textinfo);}break;}}}eXosip_event_free(je); //Free ressource in an eXosip event}
- Visual Studio 2010下编译osip及eXosip并搭建开发环境的方法
- Visual Studio 2010下编译osip及eXosip并搭建开发环境的方法
- Visual Studio 2010下编译osip及eXosip并搭建开发环境的方法
- osip及eXosip的编译及开发方法
- osip及eXosip的编译及开发方法
- osip及eXosip的编译方法
- osip及eXosip的windows编译开发链接
- osip及eXosip的编译及开发方法 和 eX.osip3.0.1在Windows下编译方法及简单UA示例
- Xcode环境下osip,eXosip, openssl的静态库编译方法(编译出来给IOS使用)
- Xcode环境下osip,eXosip, openssl的静态库编译方法(编译出来给IOS使用)
- Windows下编译eXosip、osip
- 在VC6.0下编译osip、exosip协议栈的方法
- 在VC6.0下编译osip、exosip协议栈的方法
- osip和exosip在windows下的编译静态库
- osip和exosip在windows下的编译静态库
- windows 下 osip 3.5 和 exosip 3.5 库的编译
- Linux、arm-linux下编译osip exosip
- vs2008编译osip/eXosip
- OC字符串方法总结
- Objective-C语法快速参考
- ApplicationDomain和getDefinition
- Open Wifi SSID Broadcast vulnerability
- c++ 对象切割
- Visual Studio 2010下编译osip及eXosip并搭建开发环境的方法
- 傅里叶分析之掐死教程(完整版)
- 安卓android studio配置
- C++ Primer学习 《IO Library》
- web开发中所遇到的状态码
- Flash应用程序域学习笔记
- UVA - 10029 Edit Step Ladders (二分+hash)
- LeetCode 38 Flatten Binary Tree to Linked List
- C语言之字符串