-
Notifications
You must be signed in to change notification settings - Fork 25
Build From Source
安装下列软件包(注意你的发行版可能使用与此不同的包名)
依赖的包有:
gcc g++ make cmake pkg-config curl(开发包) libpurple(开发包) sqlite3(开发包) zlib(开发包)
可选包(现在不安装基本上用不了了):
js(开发包) libev(开发包)
在linux上编译非常简单,在linux上可以任意的选择libev和libuv作为异步库,因为libuv一 般还没有进入源中,需要自己编译.所以一般使用libev.
例如,在 Ubuntu/Debian 上,可以用以下命令安装依赖的库:
$ sudo apt-get install build-essential cmake pkg-config libcurl4-openssl-dev libsqlite3-dev libmozjs185-dev libev-dev
在Fedora上,可以使用以下命令安装:
$ sudo yum install gcc gcc-c++ make cmake pkgconfig libcurl-devel sqlite-devel zlib-devel js-devel
注意推荐使用 curl>=7.22.0,否则图片收发可能有问题。
可以下载zip包或者使用git clone 命令:
$ mkdir build;cd build; $ cmake .. $ make $ sudo make install
Note
需要注意,可以使用 cmake .. -DCMAKE_INSTALL_PREFIX=/usr
来指定安装到/usr
目录下.或者在 ~/.xprofile 文件中加入 export
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
才能在桌面(如pidgin)中加载
liblwqq.so成功
编译成功以后会出现如下的提示:需要特别注意:
================lwqq flags===================== -- With Libev (Option) : ON -- With Mozjs (Option) : ON -- Build Document (Option) : OFF ===============================================
表示开启了Libev和Mozjs两个编译选项,另外不会编译文档.选项都是自动检测开启的,即如 果你的系统中安装了相应的package,则自动打开,否则关闭.详细的选项说明如下:
- With Libev : 可以减少UI的卡顿问题,会自动检测是否安装了libev-dev包来自动 启用。 因为一些系统如ubuntu的libcurl的dns查询是同步方式的,所以在网络环境差的 时候容易 卡UI.libev能够有效的解决这种问题.但是鉴于平时测定单纯用libpurple的 eventloop的效能也不算太差,所以libev使 用可选方式支持.
- With Mozjs : 提供javascript解析hash.js的能力,能够快速应对webqq更新js的 情况而无需重新编译。(不过最近webqq更新js的频率变低了),支持mozjs185和 mozjs17两种,默认以mozjs17优先. 更新: 在0.3.1版本中, 默认会使用自动检测hash 的功能, 因此99%的情况下不必再编译mozjs. 详细的说就是, 会在几个自带hash函数中 进行尝试, 知道尝试出正确的那个. 但是如果是腾讯出了一个新的hash算法, 则还是会 提示hash错误.
Note
令人意外的是,Libev不是必选的依赖,如果在没有开启Libev的情况下编译也能通过,此时如果使用异步的API,会提示:
Assertion failed: (LWQQ__ASYNC_IMPL(loop_create)), function lwqq_async_init, file /Users/xiehuc/PROJECT/lwqq/lib/async.c, line 94.
意思是没有提供异步实现的接口。要么重新打开Libev,要么在代码中提供一个新的实现。
可以使用 cmake .. -DWITH_{...}
来强制打开关闭选项.例如当你编译之后才安装的
依赖包,由于自动检测已经关闭选项了.所以使用:
cmake .. -DWITH_LIBEV=On -DWITH_MOZJS=On
来重新打开,最后的是否成功打开可以参考提示信息.
由于Centos上面的很多包都太老了,导致没有mozjs185,这里需要说明的是,这里需要说明的 是,我只能尽量去向后兼容,对于做到对centos现有的兼容程度已经付出了很多的劳动,而且 始终没有办法避免包太老的问题,我已经决定不再 回复centos编译问题提出的任何 issue ,请自行解决,现在还有很多人没有明白mozjs185是怎么回事:
- mozjs185包是 可选 的, 在0.3.1版本以后能够自动选择hash, 更加降低了mozjs 的必要性.
- 开启了mozjs185包的好处是以后在webqq更换了hash校验之后能很快重新登录,并且是 对用户透明的.因为这里需要别人先发issue说hash函数更新了,我去从官网的js中把 hash相关的趴下来,放到sae中,然后其它用户在下次登录的时候会自动从sae下载 hash.js从而顺利验证.
- 不开启mozjs185不影响平时的使用,但是在webqq更换了hash校验之后就会提示错误,并 且只有等到我把js翻译成c语言,然后放到github上,再由自己重新编译源代码或者是等 待别人打包好的二进制包.所以周期比较长
- 把js翻译成c的工作我以后会越来越少做,因为我相当于是义务性质的工作,想翻译或者 是不想翻译是我的事,因为我已经提供了更好的解决方案,至于自己因为包太老的原因 我只能表示我已经尽力的,翻译js的工作是重复的,多余的.如果是你觉得我十分的懒惰 ,或者是性格恶劣或者是不够意思,我想说"这里是开放的平台",请不要把压力都集中在 某一个人上面,因为 完全可以提交patch ,这个项目开了这么久了 也没见多少 人pull request ,这个开源的气氛完全没有.
其实我还有很多想说的,但是我说了结果肯定会引起不愉快的,所以我还是先闭口吧.
我随便找了一个centos可用的mozjs,可以用下面的方法安装:
#yum localinstall http://packages.squiz.net/centos/5/x86_64/mozjs17-devel-17.0.0-4.el5.centos-squiz.x86_64.rpm http://packages.squiz.net/centos/5/x86_64/mozjs17-17.0.0-4.el5.centos-squiz.x86_64.rpm
其它的步骤就和上面的一样了.
另外,可能centos上需要 make两次 才能编译,这个可能是cmake2.6的问题,cmake2.6实 在是太老了,我在其它系统上面也没有遇到问题,所以就没有去排查了.应该不是我配置写得 不好的原因.
在Mac平台的编译方法有两种, 一种是类似 Linux 方式的 cmake;make;make install 流.
这个比较简单, 直接使用 brew 安装缺失的包就行了. 另外执行install的时候不必加上
sudo,直接使用 make install
即可。
另外一种是使用 Xcode 来编译出 framework. framework 比第一种方式好的在于可以放在 .app 或者 bundle 中. 移动性能好一些.
- 首先还是使用 brew 安装缺失的依赖. 注意 mozjs185 在 brew 中叫做 spidermonkey.
- 然后将 nspr 的3个 .a 文件(libnspr4.a, libplc4.a, libplds4.a)放在源代码的 xcode 目录中, 方便静态链接.
-
mkdir build; cmake .. -DWITH_LIBEV=Off -DWITH_LIBUV=Off
来生成 config.h 文 件.由于我们编译 framework 是为了接下来给 adium 用的, 所以这里不需要 libev, 直接使用 glib 的异步
- 打开 xcode/lwqq.xcodeproj 编译即可.
- 支持程序:安装windows版本的 cmake 和 mingw32 , 并且设置好环境变量.注意,在Cygwin中的mingw32和直接安装的mingw32是不一样的环境 。为了避免不必要的麻烦,推荐在后者的环境中编译。另外msys并不会直接找到mingw, 需要先在Windows的环境变量中加入X:/mingw/bin即可。
- 异步的支持:Windows平台上不支持libev(自己编译出来的没有backends),所以可以使用替代的libuv或者是完全禁用异 步。如果是要在其它程序中引用liblwqq库,还可以通过async_impl.h使用其它的异步库 。详见API。
使用一个文件夹作为编译的根目录,作为 lwqq_root
,并且,从github上下载lwqq的源代码
.放在 lwqq_root/lwqq
下面
建立 lwqq_root/win32-dev
文件夹作为存放依赖的目录。
- 下载 libcurl
,并且解压之后放在
win32-dev/libcurl
目录下面.并且将其中的lib/libcurldll.a
更改为lib/libcurl.dll.a
为了使得cmake能够顺利的找到 预编译的dll符号链接. - 下载 sqlite3 dll 和 sqlite3
header 分别下
并且解压之后放在
win32-dev/sqlite3
目录下面 - 下载 zlib dll 和 zlib header 并且解压之后放在`win32-dev/zlib`目录下面
为了方便大家,也可以直接下载整理好的依赖-- 傻瓜包 ,并且直接解压到 win32-dev文件夹
打开一个Mingw Shell(也被称作MSYS),然后打开 lwqq_root/lwqq
目录,输入:
mkdir build; cd build; cmake .. -G "MSYS Makefiles" -DWIN32_LIBS_DIR=`lwqq_root/win32-dev` -DRES_DIR="share\\lwqq" make
RES_DIR 设置为相对路径是为了在pidgin-lwqq中正确找到资源文件。
然后就可以在 build/lib
目录下找到liblwqq.dll,以及在 build/src
目录下面找到lwqq-cli.exe了.
注意:因为cmake使用cache的方式记忆设置,所以容易出现混乱,可以删除CmakeCache.txt之后重头编译.
首先下载libuv的源码包,解压到lwqq_root/win32-dev/libuv下面,然后先用git clone gyp 准备好gyp,安装好python2.7 libuv目前只能在visual studio下编译.mingw编译会出现错误。所以我们执行
$ vcbuild.bat release x86 shared
编译libuv,测试只能编译动态链接库,编译静态链接库的话mingw会无法链接。如果出现编译错误。不用管。因为是在run-test子项目出错的。我们只需要libuv。
- 在上一步的cmake中直接输入:会自动检测libuv是否存在并启用。
- cmake .. -G "MSYS Makefiles" -DWIN32_LIBS_DIR=`lwqq_root/win32-dev`
也可以使用-DWITH_LIBUV=On强制打开
Bob Xiang 提供了一个编译好的二进制包( issue #22 ).见: http://pan.baidu.com/s/1hq01wEC
将各个依赖库中的dll文件复制到 build/src
目录下面,把 build/lib
目录下的
liblwqq.dll复制到 build/src
,输入 lwqq-cli -u[qqnum] -p[passwd]
运行简
单的登录程序测试是否正常工作.