1.安装lua环境

先查看一下apt可获取的lua版本



我们选择lua5.1版本进行安装

sudo apt install lua5.1

安装完之后测试一下是否安装成功,如果可以正常使用,则lua环境已经安装完毕。

2.安装lua相关的c库

lua环境安装完毕,但是此时在c中还不能对lua进行调用,或者生成供lua调用的c库,因为还没有安装lua的c库,通过下面这条命令安装相应的库文件和头文件

sudo apt-get install lua5.1-0-dev

安装完毕后,我们写代码进行测试

2.1生成c的动态库供lua调用

新建一个c文件

vim addlib.c

写一个addc函数供lua调用

#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h> static int addc(lua_State *L)
{
int a,b,c;
a = lua_tonumber(L,1);
b = lua_tonumber(L,2);
c = a + b;
lua_pushnumber(L,c);
return 1;
} static const struct luaL_Reg lib[] =
{
//左边是在lua中调用的函数名,右边是对应c函数
{"addc",addc},
{NULL,NULL}
};
//luaopen_xxx 这个xxx一定要和导出的库名一样,不然lua无法识别这个函数,无法进行函数的注册
int luaopen_addlib(lua_State *L)
{
//这里的"testadd"是在lua中调用库函数的全局变量名,不需要和库名addlib保持一致,但一般会用一样的名字
luaL_register(L,"testadd",lib);
//luaL_register(L,"addlib",lib);
return 1;
}

保存后对代码进行编译,生成lua用的so或dll库

gcc addlib.c -fPIC -shared -o addlib.so



接下来进行lua对c调用的测试



调用成功

2.2在c中调用lua

创建printHello.lua文件

vim printHello.lua

写一个PrintHelloLua函数

function PrintHelloLua()
print("hello !!!")
end

创建luaFunctionTest.c文件

vim luaFunctionTest.c
#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h> int main()
{
//创建lua运行环境
lua_State *luaEnv = lua_open();
luaopen_base(luaEnv);
luaL_openlibs(luaEnv);
if(!luaEnv)
{
return -1;
} //载入lua文件
int loadInfo = luaL_loadfile(luaEnv,"printHello.lua");
if(loadInfo)
{
return -1;
}
//执行lua文件
lua_pcall(luaEnv,0,0,0); //调用PrintHelloLua函数
lua_getglobal(luaEnv,"PrintHelloLua");
lua_pcall(luaEnv,0,0,0);
return 0;
}

生成可执行文件,需要通过 -llua5.1指明使用的库文件

gcc -o luaFunctionTest luaFunctionTest.c -llua5.1

运行可执行文件,成功输出 hello !!!

./luaFunctionTest

ubuntu配置lua环境,并进行c与lua的相互调用的更多相关文章

  1. ubuntu 配置JDK环境变量

    ubuntu 配置JDK环境变量 (2011-11-25 16:45:59) 转载▼ 标签: ubuntu jdk 环境变量 杂谈 分类: Linux_Ubuntu_CentOs 过程如下: 1. 先 ...

  2. Ubuntu 配置Tomcat环境(转载)

    Ubuntu 配置Tomcat环境   1.下载Tomcat http://tomcat.apache.org/,下载Tomcat 8(由于目前最新eclipse不支持tomcat 9) 将下载的ap ...

  3. ubuntu配置机器学习环境(一) ubuntu安装

    第一部分:Ubuntu14.04安装 Step :安装Ubuntu Step 1.1:准备安装U盘 首先到官网下载Ubuntu的镜像,我使用的是Ubuntu 14.04.3的ISO. 然后使用Ultr ...

  4. Linux:Ubuntu配置jdk环境变量

    1.下载jdk 推荐官网:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 下载tar.gz包即可. ...

  5. Ubuntu配置java环境变量

    参考文章: http://www.cnblogs.com/BigIdiot/archive/2012/03/26/2417547.html 方法1:修改/etc/profile 文件所有用户的 she ...

  6. ubuntu配置服务器环境

    今天环境不知道怎么就不能用了.自己新配了一个: 添加源: vi /etc/apt/sources.list 将下面这些源添加进去: deb http://debian.ustc.edu.cn/ubun ...

  7. Ubuntu 配置Tomcat环境

    1.下载Tomcat http://tomcat.apache.org/,下载Tomcat 8(由于目前最新eclipse不支持tomcat 9) 将下载的apache-tomcat-8.0.35.t ...

  8. wsl ubuntu 配置c++环境

    1.sudo apt-get install  build-essential 更新 配置源 2.sudo apt install gcc-8 3.sudo apt install g++-8 cd ...

  9. ubuntu配置机器学习环境(二) cuda 和cudnn 安装

    Nvidia CUDA Toolkit的安装(cuda) PS:特别推荐*.deb的方法,目前已提供离线版的deb文件,该方法比较简单,不需要切换到tty模式,因此不再提供原来的*.run安装方法,这 ...

  10. ubuntu配置机器学习环境(三) opencv 安装

    这里使用脚本安装 一些教程里使用cmake 安装,很容易出错的 使用github上的安装脚本,自动化安装 参考链接 Ubuntu $ cd Ubuntu/2.4 $ chmod +x * # 如果要安 ...

随机推荐

  1. From CORBA technology To Thrift technology

    技术在变,需求不变,把复杂的事情搞简单,而不是相反. 无论CORBA还是Thrift,目标只有一个:一处定义,多处使用,解决的问题只有一个:规范和简化客户端与服务器的通信的开发工作. 是不是和java ...

  2. Smarty 变量修饰器

    为了更方便的实现 功能与显示分离,通常会用 smarty 将功能代码中的数据 assign 到页面中,在页面中合理使用 smarty 的修饰方法,会使页面显示更美观! 一个数据可同时使用多个修饰函数, ...

  3. ubuntu python apache2 wsgi django框架

    在ubuntu上通过apatch2和wsgi部署django (亲手做过!!!) 一,我的python.django.apatch2版本: python:python -V 2.7.3 django: ...

  4. Java和Spring邮件的发送

    方法一: java发送电子邮件:这里以发送qq邮件为例: package test; import java.util.Properties; import javax.mail.Authentica ...

  5. AtCoder Beginner Contest 118 解题报告

    A - B +/- A #include <bits/stdc++.h> int main() { int a, b; std::cin >> a >> b; b ...

  6. ZJOI2019 Day1 题解

    想要继续向前,就从克服内心的恐惧开始. 麻将 题意 在麻将中,我们称点数连续的三张牌或三张点数一样的成为面子,称两张点数一样的牌为对子.一副十四张麻将牌的胡牌条件是可以分成四个面子和一个对子或者分成七 ...

  7. BZOJ5415[Noi2018]归程——kruskal重构树+倍增+堆优化dijkstra

    题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海 ...

  8. BZOJ1266 AHOI2006上学路线(最短路+最小割)

    求出最短路后找出可能在最短路上的边,显然割完边后我们需要让图中这样的边无法构成1到n的路径,最小割即可,非常板子. #include<iostream> #include<cstdi ...

  9. 【POI 每日题解 #4】 [POI2008]MAF-Mafia

    [POI2008]MAF-Mafia 很容易看出是拓扑 但不容易想出来怎么做[可能是我太菜 首先 入度为零的人是肯定死不了的 接着 我们分成环和链分析 对于一个链 最多的情况就是顺着一个个开枪 最后剩 ...

  10. BZOJ 4754 [JSOI2016]独特的树叶 | 树哈希判同构

    题目链接 这道题是一道判断无根树同构的模板题,判断同构主要的思路就是哈希. 一遇到哈希题,一百个人能有一百零一种哈希方式,这篇题解随便选用了一种--类似杨弋<Hash在信息学竞赛中的一类应用&g ...