编译Lua - 创建.so文件?

时间:2013-12-30 21:59:59

标签: linux lua makefile centos dynamic-library

我在Centos 6.5上编译Lua 5.2.3,编译/安装工作正常。

但是,我还需要开发库来编译另一个程序。我通常会这样做:

yum install lua-devel

问题是安装Lua 5.1共享库,而不是5.2.3。

可能只能从Centos仓库运行Lua 5.1,但如果它是一个简单的事情(对于知道的人)使最新版本工作,那么我'感谢有人给我指路。对我来说,Linux makefile仍然有点呃,嗯,你知道......

修改

我发现这个网站 - http://lua-users.org/lists/lua-l/2006-10/msg00091.html - 从很久以前就建议对makefile进行一些更改,但是当我现在运行它时我得到了这个:

gcc -fPIC -o liblua.so -shared lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o 
lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o 
ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o 
liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o
/usr/bin/ld: lapi.o: relocation R_X86_64_32 against `luaO_nilobject_' can not be used 
when making a shared object; recompile with -fPIC

注意到我用无用的手势添加了-fPIC;在错误中暗示的链接中没有提出建议。

编辑2 - 解决方案

好的,虽然我自己最初发现了这个模型,但是它保证了它能够让我坚持不懈。这就是我做的......

catwell's link我手动编辑了Makefile。它很容易遵循(正如catwell建议的那样,忽略luaconf.h mods)。

缺少的链接是更改以下行:

src/Makefile
------------
CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS) -fPIC

您正在将-fPIC添加到最后。

现在似乎工作正常。

感谢Etan,但我接受了catwell的答案,因为它最直接地解决了这个问题。

4 个答案:

答案 0 :(得分:4)

默认情况下,lua团队不包括对共享库的支持,因为以可移植的方式这样做并不简单。如果从CentOS获得lua的srpm,你应该能够在其中找到他们对lua构建过程所做的修改,以生成它们打包和发送的共享对象。 CentOS srpm在vault.centos.org上直播。

答案 1 :(得分:4)

了解Arch Linux does it的方式。你不应该触摸LUA_ROOT,但补丁的其余部分是好的,而且相对简单易懂。

不要忘记将-fPIC添加到CFLAGS(Arch包does it here)。

答案 2 :(得分:1)

@ beigerac的答案也适用于lua-5.3.0。但是,它只是编译liblua.so.5.3.0并在lua-5.3.0/src内建立符号链接。在执行sudo make install时,它不会像我们应该的那样将.so文件复制到/usr/local/lib。所以,我添加到补丁上,以便将.so文件复制到位。

对于lua-5.3.0,这些补丁文件对我有用:

Makefile.patch

并且,对于src / Makefile:

src/Makefile.patch

将补丁文件复制到lua-5.3.0 /和lua-5.3.0 / src(分别)并应用如下补丁:

cd lua-5.3.0/
wget https://gist.githubusercontent.com/dcarrith/899047f3a2d603b25a58/raw/7fa41ee5c0113ed721abe979c269afe48472baf5/Makefile.patch -O Makefile.patch --no-check-certificate
patch -l < Makefile.patch
unexpand Makefile > Makefile.unexpanded
mv Makefile.unexpanded Makefile

cd src/
wget https://gist.githubusercontent.com/dcarrith/6095183b8dc60c909779/raw/614d769d5b70b69b5d67cfb618696bfb906e2aca/src.Makefile.patch -O Makefile.patch --no-check-certificate
patch -l < Makefile.patch
unexpand Makefile > Makefile.unexpanded
mv Makefile.unexpanded Makefile

unexpand行是为了确保修补程序中可能已放置的任何空格都转换为标签符,以便make不会因错误missing separator而抱怨。

答案 3 :(得分:0)

无需打补丁。只是告诉你额外的标志

lua-5.3.5$ make MYCFLAGS="-fPIC" linux
相关问题