编译 Lua - 创建 .so 文件?
我正在Centos 6.5上编译Lua 5.2.3,编译/安装正常。
但是,我还需要另一个程序的开发库才能编译。通常我会通过这样做安装:
yum install lua-devel
问题是,它安装的是Lua 5.1共享库,而不是5.2.3。
我可以只使用Centos repo中的Lua 5.1,但是如果有一个相对简单的方法(对于了解的人来说),使最新版本工作,则会感激有人向我展示方法。对我来说,Linux的Makefiles还是有点,呃,你知道的...
编辑
我找到了这个网站-http://lua-users.org/lists/luah/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-解决方案
好吧,虽然我最初自己找到了这个mod,但是catwell的保证使我坚持下去。这是我做的...
从catwell的链接 ,我手动编辑了Makefile。很容易跟进(如catwell所建议的,忽略luaconf.h mods)。
缺少的连接是更改以下行:
src/Makefile
------------
CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS) -fPIC
你将-fPIC添加到最后。
现在似乎工作得很好。
感谢Etan,但我接受catwell的答案,因为它最直接地导致了解决方案。
看看 Arch Linux是怎样做的。你不应该触及 LUA_ROOT,但其余部分的补丁是良好的且相对容易理解的。
别忘了在 CFLAGS 中也加入 -fPIC(Arch软件包在这里做了这个)。
@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,这些补丁文件适用于我:
而对于src/Makefile:
将补丁文件复制到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 错误。
不需要打补丁,只需告诉 make 你的额外 cflags
lua-5.3.5$ make MYCFLAGS="-fPIC" linux
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
lua 团队默认情况下不支持共享库,因为在可移植的方式下做到这一点并不简单。如果您从 CentOS 获取 lua 的 srpm,您应该能够在其中找到他们对 lua 构建过程所做的修改,以生成他们打包和发送的共享对象。CentOS srpm 存在 vault.centos.org 上。