织梦CMS - 轻松建站从此开始!

罗索

关于vs2008编译linphone-3.5.2

落鹤生 发布于 2013-01-14 17:42 点击:次 
网上已经有人用vs2008编译好了linphone3.3.2, 工程地址http://code.google.com/p/linphone-vs2008/,相关依赖库都配置好了,下载直接编译即可。我试着用 vs2008来编译linphone3.5.2,结果麻烦一大堆。
TAG:

网上已经有人用vs2008编译好了linphone3.3.2, 工程地址http://code.google.com/p/linphone-vs2008/,相关依赖库都配置好了,下载直接编译即可。我试着用 vs2008来编译linphone3.5.2,结果麻烦一大堆。

1.资源下载:

linphone-3.5.2.tar.gz   http://download-mirror.savannah.gnu.org/releases/linphone/3.5.x/sources/linphone-3.5.2.tar.gz

speex-1.2rc1.tar.gz     http://www.speex.org/downloads/

osip、exosip

2.编译speex

    解压linphone-3.5.2.tar.gz,在linphone-3.5.2目录中新建codecs目录,将speex- 1.2rc1.tar.gz解压至codecs目录,并更名为speex。进入linphone-3.5.2\codecs\speex\win32 \VS2008,可以看到vs2008工程,打开编译libspeex、libspeexdsp两个工程即可。

3.编译oRTP

进入目录oRTP\build\win32native,打开vs工程,直接编译即可

4.编译mediastreamer

    首先编译一个无视频版本。打开mediastreamer2\build\win32-novideo中的工程,在工程属性中添加宏定义MS2_INTERNAL,remove掉文件gsm.c,并添加以下文件到工程中
bitratecontrol.c
bitratedriver.c
eventqueue.c
qualityindicator.c
audioconference.c

还需要修改以下几个地方

打开文件alldescs.h,注释以下行:

  1. //extern MSFilterDesc ms_gsm_dec_desc; 
  2. //extern MSFilterDesc ms_gsm_enc_desc; 
  3.  
  4. //&ms_gsm_dec_desc, 
  5. //&ms_gsm_enc_desc, 

现在能够编译成功了,修改两个地方,否则而后编译linphone coreapi时会有麻烦
在mediastreamer2.def中添加

  1. ms_thread_exit 

打开mseventqueue.h,在函数定义的外面加上

  1. #ifdef __cplusplus 
  2. extern "C"
  3. #endif 
  4. ... 
  5. #ifdef __cplusplus 
  6. #endif 
5.编译osip及eXosip

这两个库我是直接从开头提到的那份代码中copy过来的,不过需要做小许修改。eXosip2需要添加几个导出接口,打开eXosip2.def,添加

  1. eXosip_call_get_referto 
  2. eXosip_call_find_by_replaces 

PS:本来还需要导出接口eXosip_set_tls_ctx,但是从代码中发现需要打开宏HAVE_OPENSSL_SSL_H,需要引入SSL库。没有打开这个宏的时候,编译coreapi的时候需要注释掉这人函数的调用。

6.编译linephone中的coreapi

coreapi没有提供vs工程,需要自己建立dll工程,将copreapi中所有的文件导入工程,再去掉以下几个文件

  1. linphonecore_jni.cc 
  2. tunnelmanager.hh 
  3. tunnelmanager.cc 
  4. sipwizard.c 
  5. test_ecc.c 
  6. test_lsd.c 

添加宏定义

  1. IN_LINPHONE;LINPHONE_VERSION=\"3.5.2\";LINPHONE_PLUGINS_DIR=\"plugins\" 

添加头文件依赖目录

  1. ../oRTP/include;../mediastreamer2/include;../eXosip/include;../osip/include 

新建一个unistd.h文件,内容如下:

  1. /** This file is part of the Mingw32 package. * unistd.h maps (roughly) to io.h */  
  2. #ifndef _UNISTD_H  
  3. #define _UNISTD_H  
  4. #include <io.h>  
  5. #include <process.h>  
  6. #endif /* _UNISTD_H */  

并将#include <unistd.h>,修改为#include "unistd.h"
此时编译会发现一大堆错误,主要是vc不支持在函数中间定义变量,需要错误处的定义放到函数入口处即可
直接注释掉coreapi中的sal_eXosip2.c中对的调用语句 

  1. //eXosip_set_tls_ctx(&tlsCtx); 

注释这条语言的影响暂不清楚
找到lpconfig.c中的以下行注释掉

  1. //if (chmod(filename, S_IRUSR | S_IWUSR) == -1) 
  2. //     ms_warning("unable to correct permissions on " 
  3. //              "configuration file: %s", 
  4. //             strerror(errno)); 

一个奇怪的错误信息
 error C2078: too many initializers     e:\multimedia\linphone-3.5.2\coreapi\siplogin.c     120
查看源码,很很明显SipSetup linphone_sip_login赋值个数比定义的要多,修正后如下:

  1. SipSetup linphone_sip_login={ 
  2.       "SipLogin"
  3.       SIP_SETUP_CAP_LOGIN, 
  4.       0, 
  5.       NULL, 
  6.       NULL, 
  7.       sip_login_init_instance, 
  8.       NULL, 
  9.       NULL, 
  10.       NULL, 
  11.       sip_login_do_login, 
  12.       NULL, 
  13.       NULL, 
  14.       NULL, 
  15.       NULL, 
  16.       NULL, 
  17.       //NULL, 
  18.       //NULL, 
  19.       //NULL, 
  20.       sip_login_do_logout, 
  21.     NULL, 
  22.     NULL 
  23. }; 

修改misc.c文件
找到函数lp_spawn_command_line_sync
将第一行修改为,#if !defined(_WIN32_WCE) && !defined(_WIN32), windows不支持popene及pclose函数

导出接口函数
要新建文件coreapi.def,导出接口函数,需要什么就添加什么吧。


经过以上修改差不多应该能够编译成功了

(gavinr)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201301/16461.html]
本文出处:CSDN博客 作者:gavinr 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容