首先安装 subversion client:
sudo apt-get install subversion subversion-tools
svn checkout http://libjingle.googlecode.com/svn/trunk/ libjingle-0.4.0
或者直接到官网下载源码 libjingle-0.4.0.tar.gz:
wget http://libjingle.googlecode.com/files/libjingle-0.4.0.tar.gz
uzip libjingle-0.4.0.zip
安装依赖库:
sudo apt-get install libexpat1-dev libglib2.0-dev libogg-dev libssl-dev libasound2-dev libspeex-dev openssl
下载 ortp, speex, iLBC 源码并安装:
wget http://ftp.twaren.net/Unix/NonGNU/linphone/ortp/sources/ortp-0.16.1.tar.gz
tar zxvf ortp-0.16.1.tar.gz
cd ortp-0.16.1
./configure
make
sudo make install
wget http://downloads.us.xiph.org/releases/speex/speex-1.0.5.tar.gz
tar zxvf speex-1.0.5.tar.gz
cd speex-1.0.5
./configure
make
sudo make install
wget ftp://ftp.eenet.ee/pub/FreeBSD/distfiles/ilbc-rfc3951.tar.gz
tar zxvf ilbc-rfc3951.tar.gz
cd ilbc-rfc3951
./configure
make
sudo make install
编译安装 libjingle:
cd libjingle-0.6.14
./configure --with-ilbc=/usr/local --with-speex=/usr/local
make
sudo make install
编译的过程,会遇到很多的错误。其中之一是因为 gcc4(使用 gcc --version 查看 gcc 版本)造成的,二是 ortp 的版本问题,另外就是 fileshare 的 bug。
cd libjingle-0.4.0
wget "http://libjingle.googlecode.com/issues/attachment?aid=-5750252352650129752&name=libjingle-0.4.0-gcc43.patch" -O gcc43.patch
wget "http://libjingle.googlecode.com/issues/attachment?aid=-673077151193645057&name=ortp.patch" -O ortp.patch
wget "http://libjingle.googlecode.com/issues/attachment?aid=8593976822449450369&name=libjingle-fileshare.patch" -O fileshare.patch
patch -p0 < gcc43.patch
patch -p1 < ortp.patch
patch -p1 < fileshare.patch
除了这些 patch,我们还需要手工修改个别文件,就是在下面源码文件头上添加“#include <stdio.h>”即可:
1.talk/base/logging.cc
2.talk/base/stream.cc
3.talk/p2p/base/stunserver_unittest.cc
4.talk/p2p/base/session_unittest.cc
5.talk/p2p/base/port_unittest.cc
6.talk/session/phone/phonesessionclient.cc
7.talk/session/fileshare/fileshare.cc
8.talk/examples/login/login_main.cc
9.talk/examples/call/call_main.cc
10.talk/examples/call/console.h
再回头编译 Libjingle,就应该没有问题了。“sudo make install”后,库文件位于“/usr/lib”,执行文件位于“/usr/local/bin”。 BTW,我们在测试 pcp 的时候,发现不能成功:
root001@ubuntu001:~$ /usr/local/bin/pcp
JID: greatfoolbear@gmail.com
Password:
Logging in.
Logged in as greatfoolbear@gmail.com/pcpC10A1532
Receiving 1 files (11.4 MiB) from smartfoolbear@gmail.com
File transfer started.
File transfer failed.
session.cc(377): state_ == STATE_RECEIVEDINITIATE @ ChooseTransport
Aborted
这是问题修改“talk/base/unixfilesystem.cc”文件,在函数“UnixFilesystem::GetTemporaryFolderI()”最后加入“return true”,即可:
bool UnixFilesystem::GetTemporaryFolderI(Pathname &pathname, bool create,const std::string *append) {
pathname.SetPathname("/tmp");
if (append) {
pathname.AppendFolder(*append);
if (create)
CreateFolder(pathname);
}
return true;
}