关于vs2008编译linphone-3.5.2

    网上已经有人用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,注释以下行:
//extern MSFilterDesc ms_gsm_dec_desc;
//extern MSFilterDesc ms_gsm_enc_desc;

//&ms_gsm_dec_desc,
//&ms_gsm_enc_desc,

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

打开mseventqueue.h,在函数定义的外面加上
#ifdef __cplusplus
extern "C"{
#endif
...
#ifdef __cplusplus
}
#endif
5.编译osip及eXosip
这两个库我是直接从开头提到的那份代码中copy过来的,不过需要做小许修改。eXosip2需要添加几个导出接口,打开eXosip2.def,添加
      eXosip_call_get_referto
      eXosip_call_find_by_replaces

PS:本来还需要导出接口eXosip_set_tls_ctx,但是从代码中发现需要打开宏HAVE_OPENSSL_SSL_H,需要引入SSL库。没有打开这个宏的时候,编译coreapi的时候需要注释掉这人函数的调用。
6.编译linephone中的coreapi
coreapi没有提供vs工程,需要自己建立dll工程,将copreapi中所有的文件导入工程,再去掉以下几个文件
linphonecore_jni.cc
tunnelmanager.hh
tunnelmanager.cc
sipwizard.c
test_ecc.c
test_lsd.c

添加宏定义
IN_LINPHONE;LINPHONE_VERSION=\"3.5.2\";LINPHONE_PLUGINS_DIR=\"plugins\"

添加头文件依赖目录
../oRTP/include;../mediastreamer2/include;../eXosip/include;../osip/include

新建一个unistd.h文件,内容如下:
/** This file is part of the Mingw32 package. * unistd.h maps (roughly) to io.h */ 
#ifndef _UNISTD_H 
#define _UNISTD_H 
#include <io.h> 
#include <process.h> 
#endif /* _UNISTD_H */ 
并将#include <unistd.h>,修改为#include "unistd.h"

此时编译会发现一大堆错误,主要是vc不支持在函数中间定义变量,需要错误处的定义放到函数入口处即可

直接注释掉coreapi中的sal_eXosip2.c中对的调用语句  
//eXosip_set_tls_ctx(&tlsCtx);
注释这条语言的影响暂不清楚

找到lpconfig.c中的以下行注释掉
//if (chmod(filename, S_IRUSR | S_IWUSR) == -1)
//     ms_warning("unable to correct permissions on "
//              "configuration file: %s",
//             strerror(errno));

一个奇怪的错误信息
 error C2078: too many initializers     e:\multimedia\linphone-3.5.2\coreapi\siplogin.c     120
查看源码,很很明显SipSetup linphone_sip_login赋值个数比定义的要多,修正后如下:
SipSetup linphone_sip_login={
      "SipLogin",
      SIP_SETUP_CAP_LOGIN,
      0,
      NULL,
      NULL,
      sip_login_init_instance,
      NULL,
      NULL,
      NULL,
      sip_login_do_login,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      //NULL,
      //NULL,
      //NULL,
      sip_login_do_logout,
    NULL,
    NULL
};

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

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


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





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值