当前位置:首页 » 编程软件 » osip编译

osip编译

发布时间: 2022-08-26 23:20:19

A. 跪求VS2008下如何编译exosip

当我有这个问题的时候,就一直Mark你的问题,结果等到我解决了你的问题还没人回答。
我来回答下吧。
OK,先从http://download.savannah.gnu.org/releases/exosip/ 下载exosip2最新项目,我是用的
libeXosip2-3.6.0,编译工具VS2008

前期需要什么?osip2开源项目,openssl开源项目,或者直接下载已经编译好的lib和dll

自己新建一个空的dll项目,将其中exosip2中的源代码和头文件都加进来,在自己的项目目录下建一个include和一个lib目录。include里将osip和openssl的头文件加进来,lib里将osip和openssl的lib文件加进来。(官方放出的源代码里竟然有个低级变量没声明的错误,自己改过来)然后就是搞人的项目属性问题了。按照下面的来

编译的附加包含目录指定之前建好的include目录
链接的附加库目录指定之前建好的lib目录

预处理宏定义处:SRV_RECORD;_CRT_SECURE_NO_DEPRECATE;HAVE_OPENSSL_SSL_H;EXOSIP_EXPORTS;_DEBUG;ENABLE_TRACE;WIN32;_WINDOWS;_USRDLL;OSIP_MT;_MT
链接器附加依赖项:
osip2.lib osipparser2.lib WSock32.Lib IPHlpApi.Lib WS2_32.Lib Dnsapi.lib ssleay32.lib libeay32.lib Crypt32.Lib

编译自己建好的exosip2项目,如果有链接错误,检查出错的函数的头文件和lib文件是否被正确指明路径。我在编译的时候很多osip的函数连接错误,发现osip2的def文件里有些函数没声明,所以接着改def文件,重新编译osip2,再返回exosip项目编译。

总之折腾半天后算是通过了,生成exosip2.lib 和exosip2.dll。
希望能帮到你,我就这样解决了。

B. 使用VC++2008编译exosip的动态库文件dll遇到无法解析的外部符号问题。

产生这些错误是因为需要用到的一些函数在osip库在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

C. 如何用c++调用pjsip库实现一个简单的sip服务器

1、开源的sip服务器端,比较好用的是Asterisk,标准C程序实现,代码清晰。

2、sip的client相对比较多,主要有exosip,pjsip和opal。exosip简单易用,在PC上用比较方便。但是涉及的相关资源太多,用了osip,srtp,ms2等众多的开源库,ms2下面还用到了ffmpeg,别的不说,光编译就是噩梦。opal功能最强,虽然也用到了ffmpeg ,但是自己封装的非常好,采用插件方式,调用灵活。opal采用class方式提供封装,接口非常友好。感觉唯一不爽的地方,就是低层使用了ptlib,虽然多平台下都很好用,但放在嵌入式下感觉稍庞大了一些。pjsip精巧,方便移植,嵌入式下应该是首选。不过视频频支持方面扩展起来比opal麻烦。个人感觉,对于windows开发者来说,pjsip最大的好处就是代码调试方便。整个工程一次编译通过,另外两个库还要找很多相关的资源

3、其他的一些协议栈也调试过,比如reSipphone,好象是这个名字,还有Yate,不过从快速开发角度看,都不太合适。现在搞sip开发的,一开始就是先找好协议栈。linphone,ekiga什么的,但庞大。对于刚开始做的,最好是一个精简的demo。后来找到pjsip下面的几个例子,慢慢地了解了sip的工作流程,当然少不了抓包工具和tcpmp。
不过,其实,sip没有想象中的那么麻烦。现在回头看,刚开始做项目,使用协议栈绝对不是好想法。如果换个方向,先熟悉SIP基本协议,然后自己改造一个,或完全写一个,可能效果更好。

D. 大家来看这个main函数是不是大大的有问题啊

运行的时候命令行输入呀,里面不是有例子么,
你编译出来文件名是tvia,输入的文件名为vias.txt
那么要执行就是在cmd里面输入tvia vias.txt回车
argv[0]就是文件名,argv[1]表示第一个命令行参数,在这里就是vias.txt

E. 如何修改环境变量LD

linux下的编程,毫无疑问的迟早都要用到LD_LIBRARY_PATH这个环境变量,不过这个环境变量是基于shell的,也就是说只有在当前设置了的shell里才会有作用,因此每次打开新的shell运行程序不停地设置LD_LIBRARY_PATH,是一件非常麻烦的事情,所以我们就会想有不有什么一劳永逸地方法,使得设置之后就不用再去设置了?答案是肯定的,即在~/目录下打开.bash_profile文件,设置环境变量如下:

Java代码
1.LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH
2.export LD_LIBRARY_PATH
LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH 那么以后打开新的shell执行程序是,再也不用每次打开shell就设置LD_LIBRARY_PATH环境变量了。

附:

linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf 或者 使用-R选项)今天下午尝试使用libosip2,安装比较简单,按照自带的help文档里面的操作进行即可。

$>mkdir linux-build

$>cd linux-build

$>../libosip2-2.2.0/configure

$>make (最后2步要在管理员权限下执行)

# make install

完成之后,会在/usr/local/lib路径下生成一些lioosipXXX.so的文件,在/usr/local/include下生成关于 osip的头文件。

为了测试安装是否正确,在eclipse下建了个测试项目,写了很简单的代码:

#include <sys/time.h>//不加的话,编译时会报错,可能osip依赖于time.h

#include <osip2/osip.h>

//之所以能找到/usr/local/include下关于osip的头文件,是因为eclipse默认把/usr/local/include 放到Include directories里面了。在eclipse的项目属性-->C++ General-->Path and symbols -->Include里面可以看到。

F. 如何编译osip和exosip

1.进入libosip2-3.6.0\platform\vsnet目录,用VS2010直接打开osip.sln文件,项目自动转换

2.更改libosip2-3.6.0\platform\vsnet\osip2.def 文件,在文件末尾追加

osip_transaction_set_naptr_record @138

3.更改libosip2-3.6.0\platform\vsnet\osipparser2.def 文件,在文件末尾追加

osip_realloc @416 osip_strcasestr @417
__osip_uri_escape_userinfo @418
4.先编译osipparser2,再编译osip2,最后在libosip2-3.6.0\platform\vsnet\Debug DLL下生成库文件:

G. 毕业设计 SIP协议的实现

我们先进行一个简单的纯SIP信令(不带语音连接建立)的UAC的SIP终端的程序开发的试验(即一个只能作为主叫不能作为被叫的的SIP软电话模型),我们创建一个MFC应用程序,对话框模式,照上面的说明,设置工程包含我们上面得到的oSIP的相关开发库及SDK的一些开发库,并且由于默认LIBC的冲突,需要排除MSVCRT[D]开发库(其中D代表Debug模式下,没有D表示Release模式下),直接使用eXosip的几个主要函数就可以创建一个基本的SIP软电话模型。

其主要流程为:
初始化eXosip库-启动事件监听线程-向SIP Proxy注册-向某SIP终端(电话号码)发起呼叫-建立连接-结束连接

初始化代码:
int ret = 0;

ret = eXosip_init ();
eXosip_set_user_agent("##YouToo0.1");

if(0 != ret)
{
AfxMessageBox("Couldn't initialize eXosip!\n");
return false;
}

ret = eXosip_listen_addr (IPPROTO_UDP, NULL, 0, AF_INET, 0);
if(0 != ret)
{
eXosip_quit ();
AfxMessageBox("Couldn't initialize transport layer!\n");
return false;
}

启动事件监听线程:
AfxBeginThread(sip_uac,(void *)this);

向SIP Proxy注册:
eXosip_clear_authentication_info();
eXosip_add_authentication_info(uname, uname, upwd, "md5", NULL);

real_send_register(30); /* 自定义函数代码请见源码 */

发起呼叫(构建假的SDP描述,实际软电话使用它构建RTP媒体连接):
osip_message_t *invite = NULL; /* 呼叫发起消息体 */
int i = eXosip_call_build_initial_invite (&invite, dest_call, source_call, NULL, "## YouToo test demo!");
if (i != 0)
{
AfxMessageBox("Intial INVITE failed!\n");
}

char localip[128];
eXosip_guess_localip (AF_INET, localip, 128);
snprintf (tmp, 4096,
"v=0\r\n"
"o=josua 0 0 IN IP4 %s\r\n"
"s=conversation\r\n"
"c=IN IP4 %s\r\n"
"t=0 0\r\n"
"m=audio %s RTP/AVP 0 8 101\r\n"
"a=rtpmap:0 PCMU/8000\r\n"
"a=rtpmap:8 PCMA/8000\r\n"
"a=rtpmap:101 telephone-event/8000\r\n"
"a=fmtp:101 0-11\r\n", localip, localip, "9900");

osip_message_set_body (invite, tmp, strlen(tmp));
osip_message_set_content_type (invite, "application/sdp");

eXosip_lock ();
i = eXosip_call_send_initial_invite (invite);
eXosip_unlock ();

挂断或取消通话:
int ret;
ret = eXosip_call_terminate(call_id, dialog_id);
if(0 != ret)
{
AfxMessageBox("hangup/terminate Failed!");
}

H. 如何学习sip,eXosip/osip!!!希望给点建议。

1、先了解sip协议本身
2、阅读exosip、osip相关文档
3、下载和编译exosip、osip源码
4、写demo

I. sip协议如何用C语言实现

1、开源的sip服务器端,比较好用的是Asterisk,标准C程序实现,代码清晰。

2、sip的client相对比较多,主要有exosip,pjsip和opal。exosip简单易用,在PC上用比较方便。但是涉及的相关资源太多,用了osip,srtp,ms2等众多的开源库,ms2下面还用到了ffmpeg,别的不说,光编译就是噩梦。opal功能最强,虽然也用到了ffmpeg ,但是自己封装的非常好,采用插件方式,调用灵活。opal采用class方式提供封装,接口非常友好。感觉唯一不爽的地方,就是低层使用了ptlib,虽然多平台下都很好用,但放在嵌入式下感觉稍庞大了一些。pjsip精巧,方便移植,嵌入式下应该是首选。不过视频频支持方面扩展起来比opal麻烦。个人感觉,对于windows开发者来说,pjsip最大的好处就是代码调试方便。整个工程一次编译通过,另外两个库还要找很多相关的资源

3、其他的一些协议栈也调试过,比如reSipphone,好象是这个名字,还有Yate,不过从快速开发角度看,都不太合适。现在搞sip开发的,一开始就是先找好协议栈。linphone,ekiga什么的,但庞大。对于刚开始做的,最好是一个精简的demo。后来找到pjsip下面的几个例子,慢慢地了解了sip的工作流程,当然少不了抓包工具和tcpmp。
不过,其实,sip没有想象中的那么麻烦。现在回头看,刚开始做项目,使用协议栈绝对不是好想法。如果换个方向,先熟悉SIP基本协议,然后自己改造一个,或完全写一个,可能效果更好。

热点内容
androidondraw调用 发布:2025-02-07 12:09:22 浏览:187
linuxkill进程 发布:2025-02-07 12:09:17 浏览:196
c语言sqrt函数怎么用 发布:2025-02-07 12:07:48 浏览:894
安卓手机怎么不用手机id登录 发布:2025-02-07 12:06:28 浏览:38
ceph缓存变慢 发布:2025-02-07 11:46:52 浏览:923
python做什么用的 发布:2025-02-07 11:46:46 浏览:563
o2o与数据库设计 发布:2025-02-07 11:35:27 浏览:929
ftp服务器推荐 发布:2025-02-07 11:35:16 浏览:700
吉利星瑞豪华加6000是有哪些配置 发布:2025-02-07 11:25:18 浏览:971
李字加工编程 发布:2025-02-07 11:23:50 浏览:881