关于lua curl的资料网上并不是很多。找来找去就那么几个,所以我绝得很有必要把我的经验记下来,以防下次忘记
---好记性不如烂笔头。
如果在网上(当然是Google)搜索挂关键字“lua curl”或“luacurl”,你搜索的头两条数据很可能是不一样。因为关于lua的curl库有两个:luacurl和Lua-cURL。
如果你打开了这个网址“http://curl.haxx.se/libcurl/lua/”,你就会看这样一段话:
There are two different efforts:
- luacurl adopts the easy interface
- Lua-cURL is aiming for a full-fledged libcurl binding (easy/multi/share interface) to the functionality of Lua
Credits
luacurl is written by Alexander Marinov and Enrico Tassi
Lua-cURL is written by J�rgen H�tzel
一、安装Lua-cURL
看着好像是两条但是其实有三个版本:这里我们先说说第二个-----Lua-cURL。
这里有两个选择:
这里我选的git上的源码,因为我发现git上的更新一点。git上的最新版本是0.2.3,luaforge上最新的是0.2。具体步骤如下:
==================安装cURL==================
# tar zxf 0.2.3
# cd lua-curl-0.2.3
# cmake directory //(directory为CMakeList.txt所在目录)
# export LUA_INCLUDE_DIR=/usr/include/lua5.1
# make CC=gcc
# make install CC=gcc
安装以后会在当前目录下生成cURL.so的动态链接库,将它复制到相应的目录,下面是我的目录:
# cp cURL.so /usr/local/lib/lua/5.1/
这样在lua中直接使用require("cURL");就可以。
二、安装luacurl——lua-curl-0.3.0
为什么说看着是两个版本,其实是三个呢,因为luacurl有两个版本:
这两个分别对应的最新版Linux版本是:luacurl-1.2.1和lua-curl_0.3.0.orig.tar.gz
先说lua-curl_0.3.0,具体步骤如下:
# tar zxf lua-curl_0.3.0.orig.tar.gz
# cd lua-curl-0.3.0
# make
# make install
这里其实我在执行make命令的时候遇到了不少问题。最重要的一个问题就是没有lua5.1.pc,错误提示如下:
Package lua5.1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `lua5.1.pc'
to the PKG_CONFIG_PATH environment variable
No package 'lua5.1' found
提示的意思是缺少lua5.1.pc这个文件,至于什么是*.pc文件,请参考这里解决这个问题最主要就是先查看系统中是否已有lua.pc这个文件,一般在/usr/lib/pkgconfig或/usr/lib64/pkgconfig,如果发现没有这个的话,在centos下可以使用如下命令查看那些安装包支持lua.pc:
# yum provides \*/lua.pc
通常会列出几个选项,同时会显示安装完以后,lua.pc会在哪个目录下。这里列出的安装包应该是lua-devel几个不同的版本。选第一个就行,安装完以后,相应的目录下应该就会有lua.pc了。然后在当前目录建立lua.pc的软连接:
# ln -s lua.pc lua5.1.pc
这样就不会出现这个问题了,但是第二个问题出现了:
libtool --silent --tag=CC --mode=link cc \
-rpath -o liblua5.1-curl.la \
-version-info 0:0:0 \
-lcurl lua-curl.lo luabind.lo
libtool: link: only absolute run-paths are allowed
make: *** [liblua5.1-curl.la] 错误 1
“libtool: link: only absolute run-paths are allowed ”这句话描述的是执行libtool的时候,-rpath后面的路径必须是绝对路径才行。我查看了一下原来的Makefile里是这样写的:
注意这里处于选中状态的LUA_RPATH的位置,在上面的错误提示中,此处正好是空,所以这里需要一个绝对路径,具体应该写什么路径呢,看这里:
红色方框中的意思是要将存放*.so的目录赋给LUA_RPATH,所以这里我写的是
LUA_RPATH:=/usr/local/lib/lua/5.1/
将这一行放在lua50 stuff的endif的后面:
进行完以上操作,就可以顺利的执行make和make install了。执行完make install后,会在刚才设置得LUA_RPATH目录下看到一个软连接
这样就安装完成了。
三、安装luacurl——luacurl-1.2.1
其实说到luacurl-1.2.1的编译安装,基本上全是泪啊,各种不给力啊。
方法一:
luacurl-1.2.1解压后只有两个文件:luacurl.c和CMakeLists.txt。所以只能使用cmake ./来执行,但是我在执行完# cmake ./ # make #make install 以后并没有发现有动态链接库库*.so文件生成,更不要说应该有的luacurl.so了。我这里行不通!
方法二:
第二种方法其实不应该叫做一种方法,应该是一种取巧的方式,我在加压后的luadist安装包的lib/lua目录下找到了我所需要的luacurl.so文件,于是就拷贝之:
# cp lib/lua/luacurl.so /usr/local/lib/lua/5.1/
结果可以。好吧应该也能算一种方法吧。