第一篇博客,把原来做过的一点东西发出来,分享一下,都比较简单,重在过程。


环境:win 7 64位系统

一、Mingw

1 下载

下载网址:

 http://www.mingw.org 

http://sourceforge.net/projects/mingw/files/ 

本文采用的是mingw-get-setup .exe

2  安装

以默认路径安装   C:\MinGW

运行mingw-get-setup,选择安装一下几项,如图所示。

* C compiler

* C++ compiler

* Mingw developer toolkit

Let the installer fetch and install everything.

wKiom1XASznCHLEUAAEyUF_TOsc781.jpg

 

3  命令工具

安装完成后,打开 C:\MinGW\msys\1.0\msys.bat  执行以下命令:

mingw-get install msys-zip

mingw-get install msys-unzip

mingw-get install msys-wget

 

mkdir -p /opt/perl/bin

cp /bin/perl /opt/perl/bin/.

二、linphone编译所需组件

1  intltool

wget http://ftp.acc.umu.se/pub/GNOME/binaries/win32/intltool/0.40/intltool_0.40.4-1_win32.zip         (intltool_0.40.4-1_win32.zip下载后存储位置 C:\MinGW\msys\1.0\ )

2  linphone-deps-win32

下载网址:http://download.savannah.gnu.org/releases-noredirect/linphone/misc

( linphone-deps-win32-1130613.zip   这是本文所用版本,可适当调整)

 

3  gtk+win32

Download lastest gtk+ win32 bundle from http://www.gtk.org ,进入http://www.gtk.org -> Download页面,页面底部选择对应的操作系统,

wKioL1XATWOzGum1AAA-GNLK2CQ754.jpg点击进入,进入页面文件较多,但我们可以下载一个集成包,这儿有两个集成包

wKiom1XAS6CDQRVpAAFPN-bEYNI293.jpg,我下载的是2.22版本的;

 

Install all these three package in /:

 

cd / (安装上文下载的3个文件,最终结果是要把3个文件释放到C:\MinGW\msys\1.0目录下)

unzip ~/intltool_0.40.4-1_win32.zip

unzip <path to gtk bundle zip>

unzip <path to linphone-deps>

 

4  GTK+ Outcrop

 theme, the one used by linphone for distribution.

cd /share/themes

wget http://art.gnome.org/download/themes/gtk2/1122/GTK2-Outcrop.tar.gz

tar -xvzf GTK2-Outcrop.tar.gz

 

5  删除一些文件

这些操作最好是可恢复的,下面还会用到,最好是放到回收站

#Remove the special stdint.h and inttypes.h included in linphone-deps: it is for MSVC only.

#Mingw will use the one in /mingw/include

rm /include/stdint.h /include/inttypes.h

 

#Remove libgcc specific libraries, only needed for MSVC:

rm /lib/libgcc.a /lib/libmingw32.a /lib/libmingwex.a

 

#Remove libintl from gtk, we don't need it and it conflicts with the one supplied by mingw.

rm /lib/libintl.dll.a

rm /include/libintl.h 

 (此处与文档README.mingw原文intl.h  ,实际操作后我认为是原文错了) 这两个文件下文还要用到,具体问什么要删掉,README提示说怕与intltool冲突。        

 

6  Inno Setup

Download and install Inno Setup Compiler (required only if you run 'make setup.exe'). Add it to your windows Path environment variable.(从网上下载 Inno Setup,较新版本就可以,以默认路径安装,C:\Program Files\Inno Setup 5;把路径添加到系统变量中;安装完成,打开系统DOS界面,直接执行 Compil32.exe  区分大小写,检查Inno Setup 是否安装正确,正确安装即可打开程序)

三 linphone 编译

1 下载linphone

直接下载linphone-3.6.1tar.gz,并在mingw下解压出来。

 

进行编译前,查看perl的版本: perl –v 

wKioL1XATazCCa_LAABLHaxXFK0090.jpg我的版本是5.6.1,其后编译过程中会提示版本过低,我的解决办法是到perl官网 http://www.perl.org/get.html 下载,下载了ActivePerl-5.8.9.829-MSWin32-x86-294280.msi 默认安装到 C:\Perl ;然后把perl文件夹下的所有文件拷贝到 C:\MinGW\msys\1.0  ,弹出的对话框选择”是”;再次检查版本:

wKioL1XATeHgNaVnAAB2At8ifgU627.jpg

我把源码解压后拷贝到C:\MinGW\msys\1.0使用,源码可放在任何地方,编译时用CD命令进入;

2  configure

./autogen.sh  (如果自己下载源码,则不执行该命令,否则可能出错,这里是tar包编译,故不用执行此命令)        

./configure --prefix=/opt/linphone --enable-shared --disable-static

wKioL1XATg_Cr-L3AAGyXeL5Qjc105.jpg

3  make

Q1:wKioL1XATiOCmed4AADfJiKgO1c004.jpg

解决:建立文件夹 mkdir -p /home/keith/staged/mingw32/lib,然后在将libiconv.la文件复制到该文件夹中,若没有该文件,就要先下载libiconv.tar.gz,编译一下就会有该文件。完成上述操作后继续make,该错误解决,但还是有error,如Q2所示。

Q2:

wKiom1XATE7TwXApAAC-EtmDl8A568.jpg

解决:该错误提示是少了libintl.dll.a文件,即上文要求删掉的文件,去回收站还原一下即可。继续make,error如Q3所示。

Q3:

wKioL1XATmLwWhN1AADOiVh3phg938.jpg

解决:提示缺少libintl.h文件,在回收站去还原一下即可 ,继续make,这下error麻烦,如Q4所示。

Q4:

wKiom1XATIWS1CKCAAMbp7xyliI948.jpg

解决:该错误提示很多函数没有定义,表明缺少库文件,或者找不到库文件,在出错文件下c:\MinGW\msys\1.0\linphone-3.6.1\mediastreamer2\src 修改Makefile,在548行LIBS 后面加上 -lole32 -lortp -lOleAut32,继续make,error减少很多,但仍然有函数没有定义,编辑c:\MinGW\msys\1.0\linphone-3.6.1\mediastreamer2\src/videofilters/msdscap-mingw.cc文件,将985 986两行注释掉,继续make,该错误解决,但又有error,如Q5所示。

Q5:

wKioL1XATpewziD0AADmJ3AYWqE461.jpg 

解决:提示没有libintl.dll文件,拷贝进去所需的文件夹下,继续make,error!如Q6所示。

Q6:

wKiom1XATMXiA2FAAADPpvp6QUI053.jpg

解决:向c:/Mingw/ming32/lib中复制libortp.dll.a文件,然后打开C:\MinGW\msys\1.0\linphone-3.6.1\mediastreamer2\tools中的Makefile文件,在271行LIBS尾部添加 -lortp,保存。Make,error!如Q7。

Q7:

wKioL1XATtax3AqeAAGsnP_DOiI364.jpg 

解决:提示libintl_printf没有定义,打开c:\MinGW\msys\1.0\linphone-3.6.1\console/linphonec.c文件,程序头部加上 #define libintl_printf printf,保存继续make,error,如Q8所示。

Q8:

wKioL1XATvKj-xIJAADSmCzSJOk435.jpg 

解决:编辑c:\Mingw\include\windows.h文件,93行,将#include <winsock.h> 改为#include <winsock2.h>,保存,继续make,成功!

4  make install 

Make成功,make install也成功,然而编译出来的linphone.exe无法运行,缺少库文件,将正常安装的linphone文件中的库文件拷贝到编译出来的exe文件夹下,再讲源码中的linphone文件夹中的gtk文件夹复制到exe所在文件夹下,即可执行,大功告成。

四 二次开发

1弹出呼叫者号码

1.1 DOS环境弹框

在c:\MinGW\msys\1.0\linphone-3.61\console\linphonec.c 文件中 341行

static void linphonec_call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState st, const char *msg){

char *from=linphone_call_get_remote_address_as_string(call);

long id=(long)linphone_call_get_user_pointer (call);

char id1[15];

itoa(id,id1,15);

MessageBoxTest(from,id1);

1.2 GTK 环境弹框

c:\MinGW\msys\1.0\linphone-3.61\gtk\main.c文件中1218行linphone_gtk_call_state_changed函数中添加

 

    

char *from2=linphone_call_get_remote_address_as_string(call);
linphone_gtk_display_something(GTK_MESSAGE_INFO,from2);


 

779行添加可 获得接听者号码

linphone_gtk_display_something(GTK_MESSAGE_INFO,entered);

 

 

嵌入python需要有库中有Python.h

Python27.dll文件,

在linux/mingw下 需要在Makefile中-LIBS位置添加 -lPython27(根据自己版本定) 才能正常编译

Linux需要安装python-dev

int Box_count=1;  在头部定义全局变量

int Flag_count=1;

///

其中 Box_count和Flag_count均为全局变量,初始值均为1.  在上述函数中 callend 与callout中被置为0;

在写python过程中,由于中文的存在造成乱码,因此,要在python语句头部添加:

#-*- coding:utf-8-*- 

再在有中文的字符串前面添加 u:

 u’中文’,然后可用str.encoding(‘utf-8’)来将unicode对象转换为字符串

gcc 1.c -lws2_32 -ladvapi32 -lmswsock -o 2.exe  用socket访问网页需要添加这三个库,在gtk/Makefile中LIBS处也要加入。