第一篇博客,把原来做过的一点东西发出来,分享一下,都比较简单,重在过程。
环境:win 7 64位系统
下载网址:
http://www.mingw.org
http://sourceforge.net/projects/mingw/files/
本文采用的是mingw-get-setup .exe
以默认路径安装 C:\MinGW
运行mingw-get-setup,选择安装一下几项,如图所示。
* C compiler
* C++ compiler
* Mingw developer toolkit
Let the installer fetch and install everything.
安装完成后,打开 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/.
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\ )
下载网址:http://download.savannah.gnu.org/releases-noredirect/linphone/misc
( linphone-deps-win32-1130613.zip 这是本文所用版本,可适当调整)
Download lastest gtk+ win32 bundle from http://www.gtk.org ,进入http://www.gtk.org -> Download页面,页面底部选择对应的操作系统,
点击进入,进入页面文件较多,但我们可以下载一个集成包,这儿有两个集成包
,我下载的是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>
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
这些操作最好是可恢复的,下面还会用到,最好是放到回收站。
#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冲突。
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-3.6.1tar.gz,并在mingw下解压出来。
进行编译前,查看perl的版本: perl �Cv
我的版本是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 ,弹出的对话框选择”是”;再次检查版本:
我把源码解压后拷贝到C:\MinGW\msys\1.0使用,源码可放在任何地方,编译时用CD命令进入;
./autogen.sh (如果自己下载源码,则不执行该命令,否则可能出错,这里是tar包编译,故不用执行此命令)
./configure --prefix=/opt/linphone --enable-shared --disable-static
Q1:
解决:建立文件夹 mkdir -p /home/keith/staged/mingw32/lib,然后在将libiconv.la文件复制到该文件夹中,若没有该文件,就要先下载libiconv.tar.gz,编译一下就会有该文件。完成上述操作后继续make,该错误解决,但还是有error,如Q2所示。
Q2:
解决:该错误提示是少了libintl.dll.a文件,即上文要求删掉的文件,去回收站还原一下即可。继续make,error如Q3所示。
Q3:
解决:提示缺少libintl.h文件,在回收站去还原一下即可 ,继续make,这下error麻烦,如Q4所示。
Q4:
解决:该错误提示很多函数没有定义,表明缺少库文件,或者找不到库文件,在出错文件下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:
解决:提示没有libintl.dll文件,拷贝进去所需的文件夹下,继续make,error!如Q6所示。
Q6:
解决:向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:
解决:提示libintl_printf没有定义,打开c:\MinGW\msys\1.0\linphone-3.6.1\console/linphonec.c文件,程序头部加上 #define libintl_printf printf,保存继续make,error,如Q8所示。
Q8:
解决:编辑c:\Mingw\include\windows.h文件,93行,将#include <winsock.h> 改为#include <winsock2.h>,保存,继续make,成功!
Make成功,make install也成功,然而编译出来的linphone.exe无法运行,缺少库文件,将正常安装的linphone文件中的库文件拷贝到编译出来的exe文件夹下,再讲源码中的linphone文件夹中的gtk文件夹复制到exe所在文件夹下,即可执行,大功告成。
在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);
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处也要加入。