编译Lua – 创build.so文件?

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

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

yum install lua-devel 

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

可以从Centos的回购库中运行Lua 5.1,但如果这是一个简单的事情(知道的人)来做最新的版本,那么我会很感激有人给我指路。 对我来说,Linux makefiles仍然有点呃,你知道…

编辑

我很久以前发现这个网站 – 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 – 解决scheme

好吧,虽然我原本是自己find了这个MOD,但是这个工作让我坚持不懈,这是我的保证。 这是我做的…

从catwell的链接我手动编辑Makefiles。 很容易遵循(而且正如catwellbuild议的,忽略luaconf.h模块)。

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

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

您将添加-fPIC到最后。

似乎现在工作正常。

感谢Etan,但我接受catwell的答案,因为它最直接的解决scheme。

Solutions Collecting From Web of "编译Lua – 创build.so文件?"

看看Arch Linux如何做到这一点 。 你不应该碰到LUA_ROOT但补丁的其余部分是好的,相对简单的理解。

别忘了给CFLAGS添加-fPIC (Arch软件包在这里 )。

lua团队默认不包含对共享库的支持,因为以便携方式这样做并不简单。 如果你从CentOS得到lua的srpm,你应该能够在其中找到他们对lua构建过程所做的修改,以生成他们所包装和运送的共享对象。 CentOS srpm的生活在vault.centos.org。

@ 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行是确保可能已经与补丁到位的任何空间转换为制表符,所以不会抱怨错误missing separator