`

在Windows下编译最新版本的Libjingle

阅读更多
Libjingle版本: 0.5.2
操作系统: Windows XP
编译器: Microsoft Visual C++ 2008 Express

具体可以参考README:
http://code.google.com/p/libjingle/source/browse/trunk/README

这里将根据我自己的环境以及遇到的问题进行总结.

1. 安装Python 2.4或者之后的版本. 因为swtoolkit只能工作在Python 2.x版本, 所以不能安装Python 3.x版本.
下载位置: http://www.python.org/

2. 安装scons-local 2.0.0或者之后的版本. 设置环境变量SCONS_DIR指向包含scons-local的目录, 如/src/libjingle/scons-local/scons-local-2.0.0.final.0/
注意SCONS_DIR指向的目录不是你下载的scons-local包直接解压缩后的目录 (这个目录包括scons.py, scons-README等文件), 而是里面包含的名为scons-local-x.x.x的子目录
下载位置: http://www.scons.org/download.php

3. 安装swtoolkit
下载位置: http://code.google.com/p/swtoolkit/

4. 下载expat包, 解压缩到talk/third_party/expat-2.0.1/
注意不要下载Win32安装包, 而应该是源代码包
下载位置: http://sourceforge.net/projects/expat/

5. 下载最新的srtp包, 解压缩到talk/third_party/srtp
注意不要使用srtp-1.4.4, 因为这个版本遗漏了Libjingle所使用的一些extensions
下载位置: http://sourceforge.net/projects/srtp/develop
为了省去你使用CVS下载最新srtp代码的麻烦, Libjingle已经上传了最新的srtp包, 下载位置: http://libjingle.googlecode.com/files/srtp-cvs.zip

如果你的expat和srtp包在其他位置或者名称不一样, 需要对应地修改talk/libjingle.scons

6. 进入到talk目录, 运行$path_to_swtoolkit/hammer.bat
将会进行编译, 最终将在talk/build/dbg/lib目录下生成:
expat.lib 
libjingle.lib 
libsrtp.lib 
libxmpphelp.lib
在talk/build/dbg/staging目录下生成:
call.exe
login.exe
relayserver.exe
stunserver.exe

下面是可能遇到的编译问题以及对应的解决方法.
1.
编译错误talk\session\phone\devicemanager.cc(31) : fatal error C1083: Cannot open include file: 'atlbase.h': No such file or directory
解决方法:
1) 安装Platform SDK
下载位置: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a55b6b43-e24f-4ea3-a93e-40c0ec4f68e5
2) 添加c:\Program Files\Microsoft Platform SDK\Include\atl到INCLUDE环境变量中, 在编译Libjingle的同一DOS窗口中执行set INCLUDE=c:\Program Files\Microsoft Platform SDK\Include\atl;%INCLUDE%

Refer to:
http://code.google.com/p/libjingle/issues/detail?id=89

2.
编译错误
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : error C2220: warning treated as error - no 'object' file generated
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: 'sockaddr' : 'struct' type redefinition
c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(132) : error C2011: 'fd_set' : 'struct' type redefinition
  c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(68) : see declaration of 'fd_set'
c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(176) : error C2011: 'timeval' : 'struct' type redefinition
  c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(111) : see declaration of 'timeval'
......
解决办法:
在devicemanager.cc中#if WIN32宏开始的地方加入
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
在在devicemanager.cc中#if WIN32宏结束之前的地方加入
#include <mmsystem.h>
最后应该如下:
#if WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <atlbase.h>
#include <dbt.h>
#include <strmif.h>  // must come before ks.h
#include <ks.h>
#include <ksmedia.h>
#define INITGUID  // For PKEY_AudioEndpoint_GUID
#include <mmdeviceapi.h>
#include <functiondiscoverykeys_devpkey.h>
#include <uuids.h>
#include "talk/base/win32.h"  // ToUtf8
#include "talk/base/win32window.h"
#include <mmsystem.h>
#elif OSX


Refer to:
http://code.google.com/p/libjingle/issues/detail?id=89
引用
12. Added #include <mmsystem.h> to line 42 of talk\session\phone\devicemanager.cc (Just above the end of the windows tag)


http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/671124df-c42b-48b8-a4ac-3413230bc43b
引用
For historical reasons, the Windows.h header defaults to including the Winsock.h header file for Windows Sockets 1.1. The declarations in the Winsock.h header file will conflict with the declarations in the Winsock2.h header file required by Windows Sockets 2.0. The WIN32_LEAN_AND_MEAN macro prevents the Winsock.h from being included by the Windows.h header.

So, please add:
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

Before "#include <windows.h>". This will tell the compiler to ignore all Winsock 1.1 definitions within windows.h.


3.
Link错误
________Linking build\dbg\obj\call.exe
LINK : fatal error LNK1104: cannot open file 'atlthunk.lib'
解决办法:
找到atlbase.h, 注释掉#pragma comment(lib, "atlthunk.lib")

Refer to:
http://code.google.com/p/libjingle/issues/detail?id=89
引用
13. Found out which version of atlbase.h the compiler was utilizing (In my case, because of the PATH that I set, the version I used was at c:\Program Files\Microsoft Platform SDK\Include\atl.  Edit that file and comment out the line #pragma comment(lib, "atlthunk.lib") which was on or around line 293.



2
0
分享到:
评论
5 楼 郑钻哲 2013-05-15  
我出错是:

________Compiling build\dbg\obj\xmpp\mucroomhistorytask.obj
mucroomhistorytask.cc
d:\libjingle\libjingle-0.6.14\talk\xmpp\mucroomhistorytask.cc : error C2220: war
ning treated as error - no 'object' file generated
d:\libjingle\libjingle-0.6.14\talk\xmpp\mucroomhistorytask.cc : warning C4819: T
he file contains a character that cannot be represented in the current code page
(936). Save the file in Unicode format to prevent data loss
scons: *** [build\dbg\obj\xmpp\mucroomhistorytask.obj] Error 2
scons: building terminated because of errors.


不知怎么解决呢?
4 楼 laiyangdeli 2011-02-18  
libjingle 0.5.1 does not compile on Windows 7 x64:
________Compiling build\opt\obj\third_party\expat-2.0.1\lib\xmlparse.obj
xmlparse.c
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\crtdefs.h(463) : fatal error C1189: #error :  You cannot use 3
2-bit time_t (_USE_32BIT_TIME_T) with _WIN64
scons: *** [build\opt\obj\third_party\expat-2.0.1\lib\xmlparse.obj] Error 2
scons: building terminated because of errors.

解决方法:
As a workaround, you can add the following line after line 62 in the "main.scons" file.
It would be read like this:
  ....
    'HAVE_SRTP',
  ],
  TARGET_ARCH = 'x86',
)

Refer to:
http://code.google.com/p/libjingle/issues/detail?id=78

0.5.2 已经不存在这个为问题.
3 楼 laiyangdeli 2011-02-17  
回家在Windows 7 (with .NET Framework 4)做build就没有正文中提到的那么多编译/Link问题. 但是需要安装Visual Studio 2010 Professional而不能是Express版.
2 楼 laiyangdeli 2011-02-17  
会遇到下面的编译错误:
talk\base\latebindingsymboltable.h(49) : fatal error C1189: #error :  Not implemented
scons: *** [build\dbg\obj\base\latebindingsymboltable.obj] Error 2
scons: building terminated because of errors.
解决方法:

在libjingle.scons中注释掉下面2行:
"base/latebindingsymboltable.cc",
"session/phone/libudevsymboltable.cc",

Refer to:
http://code.google.com/p/libjingle/issues/detail?id=121
1 楼 laiyangdeli 2011-02-17  
为了去掉下面的warning, 可以安装pywin32:
"
Warning: Unable to load win32file module; using copy instead of hard linking for env.Install().  Is pywin32 present?
"

pywin32 - Python Extensions for Windows
http://sourceforge.net/projects/pywin32/

相关推荐

    libjingle在windows和ubuntu-linux上编译方法

    本文主要针对libjingle(版本包括但不限于0.6.6、0.6.9和最新的0.6.10)在Windows与Ubuntu Linux操作系统上的编译过程进行详细介绍,并分享了在编译过程中遇到的一些常见问题及其解决方案。 #### Windows平台下的...

    libjingle vs2010 编译通过

    在本案例中,我们关注的是使用Visual Studio 2010编译libjingle的场景。 在Windows平台上,Visual Studio是一个广泛使用的C++开发环境,而VS2010是其2010年发布的版本。编译libjingle意味着你需要将源代码转换为可...

    libjingle源码(linux版本)

    标题"libjingle源码(linux版本)"指的是开源项目libjingle的一个特定版本,针对Linux操作系统。libjingle是Google开发的一个跨平台库,主要用于实现P2P(Peer-to-Peer)通信,它包含了音视频通话、即时消息等多种实时...

    libjingle0.6.14编译好的.lib

    标题"libjingle0.6.14编译好的.lib"指出这是一个关于libjingle库的特定版本(0.6.14)的编译结果,通常是一个静态或动态链接库文件,后缀为.lib,表明它是针对Windows平台的,因为Windows系统使用.lib作为库文件格式...

    libjingle文档和0.4.0版本源码

    2. **安装与配置**:详细说明如何在不同操作系统(如Linux、Windows和Mac OS X)上设置开发环境,包括编译工具链的安装和项目构建步骤。 3. **API概述**:对libjingle的主要接口进行解析,如音视频引擎、网络传输层...

    vs2015编译通过的带gips及所有必须资源的libjingle工程

    在VS2015中编译libjingle项目,开发者需要确保具备以下环境: 1. 安装Visual Studio 2015 Community或更高版本,确保包含C++工具链。 2. 下载并安装Google的协议缓冲库(Protocol Buffers),因为libjingle使用了...

    带GIPS的libjingle source

    4. `configure`:这个文件是由`autoconf`工具生成的,用于检查系统环境并创建合适的Makefile,以便于编译libjingle库。 5. `COPYING`:通常包含项目的许可信息,表明了该软件的授权方式,可能是GPL、LGPL、Apache等...

    libjingle的封装库

    3. **多平台支持**:Libjingle不仅可以在Windows、Linux、macOS等桌面系统上运行,还可以在Android和iOS等移动平台上使用,这使得开发者可以构建跨平台的通信应用。 4. **网络连接管理**:Libjingle库负责网络连接...

    Step by Step about How to Build libjingle 0.4

    本文将详细解析如何从源码编译libjingle 0.4版本,以便在自己的项目中集成和使用。 首先,我们要了解libjingle的依赖库。在这个过程中,expat是一个关键的XML解析库,用于处理libjingle中的XML数据。expat.h和expat...

    Google WebRTC for Windows 32bit 编译.doc

    本文将指导读者在 Windows 32bit 环境下编译 WebRTC 项目。 首先,我们需要下载和安装一些工具: 1. GIT 工具:用于获得 WebM 等。 2. Google Depot Tools :这是 Google 在 Chromium 中就开始使用的分发工具。...

    webrtc的android版编译实用.pdf

    在 Windows 平台上,可以使用 Visual Studio 来编译 WebRTC 项目。首先,需要设置环境变量 GYP_MSVS_VERSION=,其中 &lt;version&gt; 是要使用的 Visual Studio 版本号。然后,使用以下命令来编译项目: $ build/gyp_...

    webrtc的android版编译[文].pdf

    在Windows上,gyp默认会使用系统中的最新版本的Visual Studio。要指定特定版本,可以设置环境变量`GYP_MSVS_VERSION=&lt;version&gt;`,或者手动运行由`runhooks`触发的gyp命令。例如,如果要指定为Visual Studio 2008,...

    WebRTC编译

    - 在该目录下打开Git Bash,初始化GClient配置: ``` $ gclient config --name trunk http://webrtc.googlecode.com/svn/trunk/peerconnection $ gclient sync --force $ gclient runhooks --force ``` - 确保...

    单独编译和使用 webrtc 音频回声消除模块

    1. **获取源码**:从WebRTC的官方GitHub仓库克隆源码,确保你获取的是最新稳定版或者特定版本的代码。 2. **构建环境设置**:安装必要的依赖库,如Git、GN、Ninja、Python、CMake、协议缓冲区编译器(protoc)、SSL...

    windows桌面环境webrtc静态库

    总之,这个"windows桌面环境WebRTC静态库"资源提供了在Windows x64环境下开发WebRTC应用的基础,开发者可以借此实现基于WebRTC的音视频通信功能。但要成功地集成并运行,还需要深入理解WebRTC的架构、API以及音视频...

    WebRTC零基础开发者教程

    Windows、Ubuntu系统下的编译过程有所不同,Android下的编译则需要在Linux环境下完成。 第三章主要讲述WebRTC开发过程中需要解决的问题。例如,用户列表的获取、信令的交换、P2P通信的实现以及多媒体处理等。WebRTC...

    mediastreamer-2.8.2

    在下载mediastreamer-2.8.2的压缩包后,开发者需要将其解压并放置到指定的项目目录下,例如"\talk\third_party"。这个路径表明了mediastreamer库可能被一个名为"talk"的项目所使用,而"third_party"通常表示第三方...

    webrtc_windows_CreateOffer

    WebRTC(Web Real-Time Communication...这涉及到了WebRTC的核心API,以及在特定环境下(如2015年的技术栈)的集成和调试技巧。通过深入理解这个过程,开发者可以构建自己的音视频通话应用,实现浏览器之间的无缝通信。

Global site tag (gtag.js) - Google Analytics