文章目录
- 前言
- 一、环境
- 二、编译过程
- 2.1 gcc安装
- 2.2 编译lua
- 2.3 编译srlua库
- 三、测试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
欢迎加入博主的知识星球