[笔记] srlua库编译

文章目录

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/699836.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘在线VR展馆,企业如何通过虚拟现实技术增强客户体验和互动?

一、在线VR展馆简介:虚拟展示的未来 在线VR展馆通过虚拟现实技术构建的三维展览空间,让用户能够在任何地点通过网络接入体验沉浸式的展览环境。这种技术运用了先进的3D建模和虚拟现实技术,使观众能够在虚拟世界中自如地浏览和互动。 二、企…

【Linux】解析键盘组合键产生信号的完整过程:从硬件中断到信号发送

前言 每一个了解Linux的都知道这样一个知识,CtrlC组合键能够终止一个进程。 个人了解进程相关知识之后知道,一个进程被终止只会有有三种情况: 代码运行完毕,结果正确代码运行完毕,结果不正确代码运行异常&#xff…

智慧公厕:公共厕所信息化的创新之路

公共厕所是城市建设中不可或缺的一环,但长期以来,由于管理不善和设施落后,公厕成为城市环境中的一大难题。为了解决这个问题,变革式的智慧公厕应运而生。 智慧公厕是一种借助物联网、互联网、大数据、云计算、自动化控制等技术整…

视频号小店应该怎么去做呢?运营步骤分享!建议收藏!

大家好,我是电商小V 视频号小店是一个新推出的项目,目前可以说正处于红利期,也是正处于野蛮生长的阶段,平台现在对视频号的扶持可以说是非常大的,对于新入驻的商家也是非常友好的,所以说现在入驻是最好的时…

AVL树、红黑树

数据结构、算法总述:数据结构/算法 C/C-CSDN博客 AVL树 定义 空二叉树是一个 AVL 树如果 T 是一棵 AVL 树,那么其左右子树也是 AVL 树,并且 ,h 是其左右子树的高度树高为 平衡因子:右子树高度 - 左子树高度 创建节点…

解锁AI写作新纪元的文心一言指令

解锁AI写作新纪元的文心一言指令 在人工智能(AI)飞速发展的今天,自然语言处理(NLP)技术取得了显著的进步。文心一言,作为NLP领域的一颗璀璨明星,以其强大的文本生成和指令理解能力,为…

【优选算法】——Leetcode——611. 有效三角形的个数

目录 ​编辑 1.题目 2 .补充知识 3.解法⼀(暴⼒求解)(可能会超时): 算法思路: 算法代码: 4.解法⼆(排序双指针): 算法思路: 以输入: nums …

Python 全栈体系【四阶】(四十二)

第五章 深度学习 九、图像分割 3. 常用模型 3.2 U-Net(2015) 生物医学分割是图像分割重要的应用领域。U-Net是2015年发表的用于生物医学图像分割的模型,该模型简单、高效、容易理解、容易定制,能在相对较小的数据集上实现学习…

45.WEB渗透测试-信息收集-域名、指纹收集(7)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:计算机王-CSDN博客 WEB指纹:Web指纹也叫web应用指纹。由于所使用的工具、技术…

吞吐量 和 延时的关系

关于吞吐量/吞吐率、延时,你可以通过 Jmeter中的”聚合报告“和”用表格查看报告“来获取。 Throughput 越大,Latency 越差:因为请求过多,系统繁忙导致响应速度降低。Latency 的值越小说明能支持的 Throughput 越高:L…

【MIT6.S081】Lab7: Multithreading(详细解答版)

实验内容网址:https://xv6.dgs.zone/labs/requirements/lab7.html 本实验的代码分支:https://gitee.com/dragonlalala/xv6-labs-2020/tree/thread2/ Uthread: switching between threads 关键点:线程切换、swtch 思路: 本实验完成的任务为用户级线程系统设计上下文切换机制…

idea启动Jsp非maven项目时的一些步骤

文章目录 事前准备eclipse项目举例idea打开eclipse项目安装tomcat配置启动项启动测试 一些小问题到不到servlet 事前准备 非社区版idea【否则启动项无法配置】tomcatmysql eclipse项目举例 idea打开eclipse项目 剩下的全部下一步即可 安装tomcat 自己的文章 Javaweb - t…