编译libjingle遇到问题

8

我下载并安装了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。在两次覆盖我的Makefile后,试图遵循写得不太好的README文档,我制作了以下几乎可用的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路径字符串的位置)正在破坏构建过程,但是哪个软件包?这里的层次结构太多了,以至于我无法跟进。当然,如果任何人已经成功编译了libjingle并能指导我方向,我会很感激。


你最好向上游开发人员咨询有关编译问题的事情。 - Glenn Maynard
可能是我之前在 Google Voice 论坛发帖时不小心被删除了,我再试一次。 - jcomeau_ictx
它又出现了。不过,从第一次回复来看,我对在那个论坛上得到任何帮助并不太乐观:http://www.google.com/support/forum/p/voice/thread?tid=0d405ecfebf33dc4&hl=en&fid=0d405ecfebf33dc400049e004bb0c834 - jcomeau_ictx
我曾经在libjingle 0.4版本时与它进行了搏斗,似乎什么都没有改变...最终我决定使用farsight,这是一个libjingle的gstreamer封装,使用起来更加容易。 - liori
2个回答

24
我不熟悉这个项目,但我认为我有一个解决方法可以帮你跨过那个障碍。你需要在swtoolkit/site_scons/site_init.py中使用str()强制转换那些Dir实例。这样它们就可以被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)

3

我按照以下步骤构建了libjingle:

Linux下构建LibJingle

  1. 构建步骤

使用swtoolkit (http://code.google.com/p/swtoolkit/)构建Libjingle,它是一组对开源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/configuretalk/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。如果要求输入密码,请直接按Enter键。
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

+1 谢谢Sumit。我很高兴它现在可以“开箱即用”,当我发布问题时它并没有这样。 - jcomeau_ictx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接