[笔记] srlua库编译


前言

一、环境

centos7.9
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
lua5.1源码
srlua 源码

二、编译过程

2.1 gcc安装

yum install gcc

这里gcc安装过程和环境没有详细介绍,编译成二进制需要gcc编译器。

2.2 编译lua

目录结构:

  • lua/lua5.1.5/src
  • srlua/

查看lua源码结构

[root@localhost srlua]# ls ../lua/lua-5.1.5
COPYRIGHT  doc  etc  HISTORY  INSTALL  Makefile  README  src  test
You have mail in /var/spool/mail/root
[root@localhost lua-5.1.5]# make linux
cd src && make linux
make[1]: Entering directory `/mnt/hgfs/D/workspace/github/lua/lua-5.1.5/src'
make all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
make[2]: Entering directory `/mnt/hgfs/D/workspace/github/lua/lua-5.1.5/src'
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lapi.o lapi.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lcode.o lcode.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldebug.o ldebug.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldo.o ldo.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldump.o ldump.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lfunc.o lfunc.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lgc.o lgc.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o llex.o llex.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lmem.o lmem.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lobject.o lobject.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lopcodes.o lopcodes.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lparser.o lparser.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstate.o lstate.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstring.o lstring.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltable.o ltable.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltm.o ltm.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lundump.o lundump.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lvm.o lvm.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lzio.o lzio.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lauxlib.o lauxlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lbaselib.o lbaselib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldblib.o ldblib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o liolib.o liolib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lmathlib.o lmathlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o loslib.o loslib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltablib.o ltablib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstrlib.o lstrlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o loadlib.o loadlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o linit.o linit.c
ar rcu liblua.a lapi.o lcode.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 ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o   # DLL needs all object files
ranlib liblua.a
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lua.o lua.c
gcc -o lua  lua.o liblua.a -lm -Wl,-E -ldl -lreadline -lhistory -lncurses
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o luac.o luac.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o print.o print.c
gcc -o luac  luac.o print.o liblua.a -lm -Wl,-E -ldl -lreadline -lhistory -lncurses
make[2]: Leaving directory `/mnt/hgfs/D/workspace/github/lua/lua-5.1.5/src'
make[1]: Leaving directory `/mnt/hgfs/D/workspace/github/lua/lua-5.1.5/src'
[root@localhost lua-5.1.5]# make install
cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.1 /usr/local/lib/lua/5.1
cd src && install -p -m 0755 lua luac /usr/local/bin
cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp /usr/local/include
cd src && install -p -m 0644 liblua.a /usr/local/lib
cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1
[root@localhost lua-5.1.5]# 

可以看到已经编译完成,有liblua.a文件和lua文件

[root@localhost lua-5.1.5]# ls ./src/
lapi.c     lauxlib.o   lcode.o   ldebug.o  ldump.o  lgc.h     liolib.c  llimits.h   lmem.o     lobject.o   loslib.o   lstate.h   lstrlib.c  ltablib.c  lua     luaconf.h  lundump.h  lzio.c    print.o
lapi.h     lbaselib.c  ldblib.c  ldo.c     lfunc.c  lgc.o     liolib.o  lmathlib.c  loadlib.c  lopcodes.c  lparser.c  lstate.o   lstrlib.o  ltablib.o  luac    lua.h      lundump.o  lzio.h
lapi.o     lbaselib.o  ldblib.o  ldo.h     lfunc.h  liblua.a  llex.c    lmathlib.o  loadlib.o  lopcodes.h  lparser.h  lstring.c  ltable.c   ltm.c      lua.c   lualib.h   lvm.c      lzio.o
lauxlib.c  lcode.c     ldebug.c  ldo.o     lfunc.o  linit.c   llex.h    lmem.c      lobject.c  lopcodes.o  lparser.o  lstring.h  ltable.h   ltm.h      luac.c  lua.o      lvm.h      Makefile
lauxlib.h  lcode.h     ldebug.h  ldump.c   lgc.c    linit.o   llex.o    lmem.h      lobject.h  loslib.c    lstate.c   lstring.o  ltable.o   ltm.o      luac.o  lundump.c  lvm.o      print.c

2.3 编译srlua库

我们使用makefile文件进行编译,而非CMakeList文件
修改MakeFile文件,指定LUA路径,这里需要改为你自己的lua源代码根路径

# makefile for srlua

# change these to reflect your Lua installation
LUA= /mnt/hgfs/D/workspace/github/lua/lua-5.1.5
[root@localhost srlua]# make
gcc -I/mnt/hgfs/D/workspace/github/lua/lua-5.1.5/src -ansi -pedantic -Wall -Wextra -O2    -c -o srlua.o srlua.c
srlua.c: In function ‘getprog’:
srlua.c:141:3: warning: implicit declaration of function ‘readlink’ [-Wimplicit-function-declaration]
   n = readlink("/proc/self/exe", progdir, nsize);
   ^
gcc -o srlua -Wl,-E srlua.o -L/mnt/hgfs/D/workspace/github/lua/lua-5.1.5/src -llua -lm -ldl
gcc -I/mnt/hgfs/D/workspace/github/lua/lua-5.1.5/src -ansi -pedantic -Wall -Wextra -O2     glue.c   -o glue
./glue srlua test.lua a.out
chmod +x a.out
./a.out *
hello from inside /mnt/hgfs/D/workspace/github/srlua/a.out
19      a.out   cmake   CMakeLists.txt  dist.info       glue    glue.c  glue.h  glue.rc lua.ico lua_powered.ico Makefile        README.md       srlua   srlua.c srlua.o srlua.rc        test    test.lua        wmain.c
bye!
hello again from inside /mnt/hgfs/D/workspace/github/srlua/a.out
0       /mnt/hgfs/D/workspace/github/srlua/a.out
1       a.out
2       cmake
3       CMakeLists.txt
4       dist.info
5       glue
6       glue.c
7       glue.h
8       glue.rc
9       lua.ico
10      lua_powered.ico
11      Makefile
12      README.md
13      srlua
14      srlua.c
15      srlua.o
16      srlua.rc
17      test
18      test.lua
19      wmain.c
bye now!
[root@localhost srlua]# 

三、测试srlua库

使用srlua自带的test.lua文件生成为test二进制文件,并执行。

[root@localhost srlua]# ./glue ./srlua test.lua  test
[root@localhost srlua]# ll test
-rwxr-xr-x. 1 xxxxxxx xxxxx 199356 May 14 18:56 test
[root@localhost srlua]# ls test
test
[root@localhost srlua]# test
You have mail in /var/spool/mail/root
[root@localhost srlua]# ./test
hello from inside /mnt/hgfs/D/workspace/github/srlua/test
0
bye!
hello again from inside /mnt/hgfs/D/workspace/github/srlua/test
0       /mnt/hgfs/D/workspace/github/srlua/test
bye now!
[root@localhost srlua]# 

结果显而易见,已经转化成功。

参考

https://github.com/LuaDist/srlua

总结

总结一下过程,先编译lua源码,后引入对应路径到srlua库中用于编译srlua的glue srlua文件。


关于博主

wx/qq:binary-monster/1113673178
wxgzh: 二进制怪兽
CSDN:https://blog.csdn.net/qq1113673178
码云:https://gitee.com/shiver
Github: https://github.com/ShiverZm
个人博客:https://www.shiver.fun

欢迎加入博主的知识星球
在这里插入图片描述

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值