[笔记] 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.mzph.cn/diannao/12439.shtml

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

相关文章

苹果电脑卡顿反应慢怎么办 苹果电脑卡顿严重解决方法 mac电脑太卡了怎么办

作为Mac用户,你是否正在经历或者曾经遭遇过电脑卡顿、反应慢的困扰?这可能是由于多种原因导致的,包括自启动程序过多、系统与应用未及时更新、内存管理不当等。今天和你一起来探讨下,苹果电脑卡顿反应慢时怎么办。希望能够帮助你解…

KBPC5010-ASEMI电源控制柜专用KBPC5010

编辑:ll KBPC5010-ASEMI电源控制柜专用KBPC5010 型号:KBPC5010 品牌:ASEMI 封装:KBPC-4 正向电流(Id):50A 反向耐压(VRRM):1000V 正向浪涌电流&#x…

FreeRTOS中的动态内存管理(heap_1、heap_2、heap_3、heap_4)

FreeRTOS 提供了多种动态内存分配方案,这些方案通过不同的内存管理器(heap managers)实现,主要位于 FreeRTOS/Source/portable/MemMang 目录下。以下是几种常见的动态内存分配方案: heap_1 特点: 简单性…

大数据可视化实验(四):Excel数据可视化

目录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 1)excel函数应用.. 1 2)数据透视图绘制... 3 四、总结与心得体会... 5 一、实验目的 1)掌握函数和公式的原理 2)掌握在单元格或编辑栏中直接输入带函数的公式…

kafka学习笔记04(小滴课堂)

Kafka的producer生产者发送到Broker分区策略讲解 Kafka核心API模块-producer API讲解实战 代码: ProducerRecord介绍和key的作用 Kafka核心API模块-producerAPI回调函数实战 producer生产者发送指定分区实战 我们设置5个分区。 我们指定分区。 重新指定一个分区&am…

业务上云--从Container+BuildKitd打镜像到在Kubernetes上部署LNMP

一、背景 在基于kubeasz部署kubernetes高可用集群-CSDN博客文章部署的kubernetes集群上部署LNMP 1.1、Kubernetes环境 1.2、Harbor环境 【docker基础】使用Harbor搭建私有仓库-docker-compose使用示例--第二周作业_harbor docker-compose-CSDN博客 Harbor环境升级&#xff…

第 5 篇 : 多节点Netty服务端(可扩展)

说明 前面消息互发以及广播都是单机就可以完成测试, 但实际场景中客户端的连接数量很大, 那就需要有一定数量的服务端去支撑, 所以准备虚拟机测试。 1. 虚拟机准备 1.1 准备1个1核1G的虚拟机(160), 配置java环境, 安装redis和minio 1.2 准备6个1核1G的空虚拟机(161到166), …

Elasticsearch的使用

Elasticsearch 1、认识和安装 Elasticsearch的官方网站如下: https://www.elastic.co/cn/elasticsearch Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括: Elasticsearch&#xff1…

2024CCPC全国邀请赛(郑州)暨河南省赛

2024CCPC全国邀请赛(郑州站)暨河南省赛 一铜一银,虽不是线下第一次参赛但是第一次拿xcpc奖牌,还有个国赛奖真是不戳。感谢学长,感谢队友! 虽然遗憾没有冲到省赛金,不过还有icpc商丘&#xff08…

Milvus Cloud:打造向量数据库的Airtable级体验

向量数据库Milvus Cloud是一种用于处理和存储向量数据的数据库,它通常用于机器学习、图像和视频检索、自然语言处理等领域。要将其升级为类似Airtable那样易用且一体化的系统,需要考虑以下几个关键方面: 1. 用户界面(UI)设计 Airtable之所以用户友好,很大程度上归功于其直…

类图及类的关系

类图(Class Diagram)是UML(Unified Modeling Language,统一建模语言)中的一种图,用于描述系统中类的静态结构,包括类的属性、方法以及类之间的关系。 一、类 类(Class)…

海外仓混合订单拣货策略:人工与海外仓系统的最佳搭配模式

根据订单高效拣货是任何海外仓都要面对的问题。只有当订单可以被高效,准确的拣货之后,才能继续走下面的物流流程,所以尽可能的缩短拣货时间,提升拣货精准度,才是提升订单交付率的最佳方法。 海外仓企业都在不断寻找&am…

Android动态布局framelayout

功能说明 最近碰到一个需求,要求在网页端拖控件,动态配置app控件的模块,大小和位置,显示不同的功能,然后在app大屏展示。 技术难点: 1.动态控件位置和大小难调,会出现布局混乱,位置错…

129.哈希表:有效的字母异位词(力扣)

242. 有效的字母异位词 - 力扣(LeetCode) 题目描述 代码解决以及思路 这个方法的时间复杂度为O(N),其中N是字符串的长度,空间复杂度为O(1)(因为辅助数组的大小是固定的26)。 class Solution { public:bo…

初识C++ · string的使用(2)

目录 1 Modifiers部分 1.1 assign的使用 1.2 insert的使用 1.3 erase的使用 1.4 replace的使用 2 capacity部分 2.1 max_size的使用 2.2 capacity的使用 2.3 reserve的使用 2.4 shrink_to_fit简介 2.5 resize的使用 2.6 clear的使用 3 String operations部分 3.1 …

[数据结构1.0]快速排序

最近学习了快速排序,鼠鼠俺来做笔记了! 本篇博客用排升序为例介绍快速排序! 1.快速排序 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值&#x…

Java面试八股之一个char类型变量能不能存储一个中文字符

Java中一个char类型变量能不能存储一个中文字符?为什么? Java中一个char类型变量可以存储一个中文字符。原因如下: Unicode编码支持:Java语言采用Unicode字符集作为其内建字符编码方式。Unicode是一种广泛接受的字符编码标准&am…

两小时看完花书(深度学习入门篇)

1.深度学习花书前言 机器学习早期的时候十分依赖于已有的知识库和人为的逻辑规则,需要人们花大量的时间去制定合理的逻辑判定,可以说是有多少人工,就有多少智能。后来逐渐发展出一些简单的机器学习方法例如logistic regression、naive bayes等…

什么是CCRC?做什么用的?

CCRC(中国网络安全审查认证和市场监管大数据中心)原名为中国网络安全审查技术与认证中心,也被称为中国信息安全认证中心(ISCCC)。 该中心是经中央机构编制委员会办公室批准成立的,其主要职责是依据国家法律…

超级简单的地图操作工具开发可疑应急,地图画点,画线,画区域,获取地图经纬度等

使用echars的地图画点,画线,画区域,获取地图经纬度等 解压密码:10086007 地图也是用临时的bmap.js和china.js纯离线二选一 一共就这么多文件 画点,画线,画区域 点击地图获取经纬度-打印到控制台,这样就能渲染航迹,多变形,结合其他算法算圆等等操作 下载资源:https://download…