问题
I am compiling Lua 5.2.3 on Centos 6.5, and the compilation / install works fine.
However, I also need the development libraries for another program to compile. I would usually install these by doing this :
yum install lua-devel
Problem is that installs the Lua 5.1 shared libraries, not the 5.2.3 ones.
I could just run with Lua 5.1 from the Centos repo, but if it's a simple-ish thing (for someone who knows) to make the latest version work then I'd be grateful for someone showing me the way. For me the Linux makefiles are still a little bit er, well, you know...
EDIT
I found this site - http://lua-users.org/lists/lua-l/2006-10/msg00091.html - from a long time ago which suggested some changes to the makefiles, but I get this when i run them now :
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
noting that I added the -fPIC in a futile gesture; that wasn't suggested in the link just hinted at in the error.
EDIT 2 - SOLUTION
Ok, whilst I'd found this mod myself originally, it was catwell's assurance that it worked that led me to persevere. Here's what I did...
From catwell's link I manually edited the Makefiles. It's easy enough to follow (and as catwell suggests, ignore the luaconf.h mods).
The missing link is to change the following line :
src/Makefile
------------
CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS) -fPIC
You are adding the -fPIC to the end.
Seems to work fine now.
Thanks to Etan, but I'm accepting catwell's answer as it led most directly to the solution.
回答1:
Look how Arch Linux does it. You should not touch LUA_ROOT
but the rest of the patch is good and relatively simple to understand.
Don't forget to add -fPIC
to the CFLAGS too (the Arch package does it here).
回答2:
The lua team does not include support for shared libraries by default because doing so in a portable manner is not simple. If you get the srpm for lua from CentOS you should be able to find within it the modifications they make to the lua build process to generate the shared objects that they package and ship. CentOS srpm's live on vault.centos.org.
回答3:
@beigerac's answer works for lua-5.3.0 also. But, it's just compiling the liblua.so.5.3.0
and establishing symlinks inside lua-5.3.0/src
. When doing a sudo make install
it is not copying the .so
files to /usr/local/lib
like it probably should. So, I added onto the patch so it copies the .so files into place.
For lua-5.3.0, these patch files worked for me:
Makefile.patch
And, for src/Makefile:
src/Makefile.patch
Copy the patch files to lua-5.3.0/ and lua-5.3.0/src (respectively) and apply the patches like this:
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
The unexpand
lines are to make sure any spaces that may have been put into place with the patch are converted to tabs so the make
won't complain with the error missing separator
.
回答4:
No need to patch anything. Just tell make your extra cflags
lua-5.3.5$ make MYCFLAGS="-fPIC" linux
来源:https://stackoverflow.com/questions/20848275/compiling-lua-create-so-files