[笔记] srlua库编译

[笔记] srlua库编译

码农世界 2024-05-23 前端 67 次浏览 0个评论

文章目录

  • 前言
  • 一、环境
  • 二、编译过程
    • 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

        欢迎加入博主的知识星球

转载请注明来自码农世界,本文标题:《[笔记] srlua库编译》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,67人围观)参与讨论

还没有评论,来说两句吧...

Top