编译libjingle时出现问题

8 投票
2 回答
4475 浏览
提问于 2025-04-16 13:18

我下载并安装了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 个回答

3

我做了以下步骤来构建libjingle:

在Linux上构建LibJingle

  1. 如何构建

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/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。如果它要求输入密码,直接按回车即可。

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
24

我对这个项目不太熟悉,但我想我有个办法可以帮你解决这个问题。你需要在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)

撰写回答