编译libjingle时出现问题
我下载并安装了libjingle-0.5.2.zip,按照README的说明,又下载并安装了swtoolkit.0.9.1.zip、scons-local-2.1.0.alpha.20101125.tar.gz和expat-2.0.1.tar.gz,并通过cvs下载了nrtp。在尝试按照那个写得不太好的README的指示修改我的Makefile两次后,我做出了一个几乎能用的Makefile:
# First, make sure the SCONS_DIR environment variable is set correctly.
SCONS_DIR ?= /usr/src/scons-local/scons-local-2.1.0.alpha.20101125/
#SCONS_DIR ?= /usr/src/scons-local/
export
default: build
# Second, run talk/third_party/expat-2.0.1/configure...
talk/third_party/expat-2.0.1/Makefile:
cd talk/third_party/expat-2.0.1 && ./configure
# ...and talk/third_party/srtp/configure.
talk/third_party/srtp/Makefile:
cd talk/third_party/srtp && ./configure
# Third, go to the talk/ directory and run $path_to_swtoolkit/hammer.sh. Run
# $path_to_swtoolkit/hammer.sh --help for information on how to build for
# different modes.
build: talk/third_party/expat-2.0.1/Makefile talk/third_party/srtp/Makefile
cd talk && ../../swtoolkit/hammer.sh
help:
../swtoolkit/hammer.sh --help
但是,运行make
时出现了以下错误:
jcomeau@intrepid:/usr/src/libjingle-0.5.2$ make cd talk && ../../swtoolkit/hammer.sh *** Error loading site_init file './../../swtoolkit/site_scons/site_init.py': AttributeError: 'Dir' object has no attribute 'endswith': File "/usr/src/scons-local/scons-local-2.1.0.alpha.20101125/SCons/Script/Main.py", line 1338: _exec_main(parser, values) File "/usr/src/scons-local/scons-local-2.1.0.alpha.20101125/SCons/Script/Main.py", line 1302: _main(parser) File "/usr/src/scons-local/scons-local-2.1.0.alpha.20101125/SCons/Script/Main.py", line 929: _load_site_scons_dir(d.path, options.site_dir) File "/usr/src/scons-local/scons-local-2.1.0.alpha.20101125/SCons/Script/Main.py", line 719: exec fp in site_m File "./../../swtoolkit/site_scons/site_init.py", line 455: SiteInitMain() File "./../../swtoolkit/site_scons/site_init.py", line 451: SCons.Node.FS.get_default_fs().SConstruct_dir, None) File "/usr/src/scons-local/scons-local-2.1.0.alpha.20101125/SCons/Script/Main.py", line 677: site_dir = os.path.join(topdir, site_dir_name) File "/usr/lib/python2.6/posixpath.py", line 67: elif path == '' or path.endswith('/'): make: *** [build] Error 2
我猜测可能是某个包里新增的东西(比如一个'Dir'对象,而不是预期中的POSIX路径字符串)导致了构建过程出错,但到底是哪个包呢?这里面有太多复杂的东西让我搞不清楚。虽然我可以尝试使用旧版本的包,特别是swtoolkit和scons,但如果这里有人成功编译过libjingle,能给我一些指引,我会非常感激。
2 个回答
我做了以下步骤来构建libjingle:
在Linux上构建LibJingle
- 如何构建
Libjingle是通过swtoolkit构建的(http://code.google.com/p/swtoolkit/),这是一组对开源的SCons构建工具(http://www.scons.org)的扩展。
首先,从http://www.python.org/安装Python 2.4或更高版本。请注意,swtoolkit只支持Python 2.x,所以你不能使用Python 3.x。
其次,从http://www.scons.org/download.php安装独立的scons-local包2.0.0或更高版本,并设置一个环境变量
SCONS_DIR
,指向包含SCons的目录,例如/src/libjingle/scons-local/scons-local-2.0.0.final.0/
。第三,从http://code.google.com/p/swtoolkit/安装swtoolkit。
最后,Libjingle依赖两个开源项目,expat和srtp。你需要从http://sourceforge.net/projects/expat/下载expat到talk/third_party/expat-2.0.1/。按照http://sourceforge.net/projects/srtp/develop上的说明下载最新的srtp到talk/third_party/srtp。请注意,
srtp-1.4.4
不工作,因为它缺少Libjingle所需的扩展。如果你把expat或srtp放在不同的目录,需要相应地编辑talk/libjingle.scons
。
2.1 在Linux或OS X下构建Libjingle
- 首先,确保
SCONS_DIR
环境变量设置正确。 - 其次,运行
talk/third_party/expat-2.0.1/configure
和talk/third_party/srtp/configure
。 - 第三,进入talk/目录,运行
$path_to_swtoolkit/hammer.sh
。运行$path_to_swtoolkit/hammer.sh --help
可以获取关于如何以不同模式构建的信息。
除了上述步骤,以下内容可作为参考
设置SCONS_DIR路径
export SCONS_DIR=/home/esumit/libjingle/libjingle-0.5.2/talk/third_party/scons-local/scons-local-2.0.1
安装libasound2-dev
库以编译libJingle,否则你会遇到错误。
sudo apt-get install libasound2-dev
使用以下命令下载SRTP。如果它要求输入密码,直接按回车即可。
cvs -z3 -d:pserver:anonymous@srtp.cvs.sourceforge.net:/cvsroot/srtp co -P srtp
LibJingle目录中的可能组件
libjingle-0.5.2/talk/third_party$ ls
expat-2.0.1 libudev scons-local srtp swtoolkit
执行以下命令以构建LibJingle
libjingle-0.5.2/talk$ ./third_party/swtoolkit/hammer.sh
我对这个项目不太熟悉,但我想我有个办法可以帮你解决这个问题。你需要在swtoolkit/site_scons/site_init.py文件中,把那些Dir
实例用str()
转换一下。这样的话,它们就可以安全地被path.endswith('/')
这个方法处理了。真奇怪,怎么会在构建基础设施的主要部分存在这样的问题这么久:
第330行:
SCons.Script.Main._load_site_scons_dir(
str(SCons.Node.FS.get_default_fs().SConstruct_dir), site_dir)
第450行:
SCons.Script.Main._load_site_scons_dir(
str(SCons.Node.FS.get_default_fs().SConstruct_dir), None)