博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
留念~c调lua终于成功
阅读量:6372 次
发布时间:2019-06-23

本文共 2850 字,大约阅读时间需要 9 分钟。

hot3.png

反反复复学lua N多次了,这次终于在C中调用lua成功了!一大进步啊!

记录下过程:

1、找到代码如下:

复制代码

//add.c

#include        <stdio.h>
#include        "lua.h"
#include        "lualib.h"
#include        "lauxlib.h"
/*the lua interpreter*/
lua_State* L;
int
luaadd(int x, int y)
{
        int sum;
/*the function name*/
        lua_getglobal(L,"add");
/*the first argument*/
        lua_pushnumber(L, x);
/*the second argument*/
        lua_pushnumber(L, y);
/*call the function with 2 arguments, return 1 result.*/
        lua_call(L, 21);
/*get the result.*/
        sum = (int)lua_tonumber(L, -1);
/*cleanup the return*/
        lua_pop(L,1);
        return sum;
}
int
main(int argc, char *argv[])
{
        int sum;
/*initialize Lua*/
        L = lua_open();
/*load Lua base libraries*/
        luaL_openlibs(L);
/*load the script*/
        luaL_dofile(L, "add.lua");
/*call the add function*/
        sum = luaadd(1015);
/*print the result*/
        printf("The sum is %d \n",sum);
/*cleanup Lua*/
        lua_close(L);
        return 0;

}

复制代码

然后,lua.add的代码如下

--add two numbers

function add(x,y)
       return x + y
end 

然后,尝试编译:gcc -o add add.c

提示:  fatal error: lua.h: No such file or directory

然后,locate lua.h,无果。。。

原来在ubuntu下lua的安装包,binary和dev是分开装的,找了一下,需要安装另外一个包liblua5.1-dev

唔,装好了还是需要用-I指定,所以先找下lua.h被放哪里的。

sudo updatedb

locate lua.h

显示的结果: 

/home/zxluo/Documents/backup/Work/luascript/AndroLua/jni/lua/lua.h

/usr/include/lua5.1/lua.h

/usr/include/lua5.1/lua.hpp

/usr/src/linux-headers-3.2.0-23-generic/include/config/scsi/dh/alua.h

/usr/src/linux-headers-3.2.0-24-generic/include/config/scsi/dh/alua.h

所以,添加文件再次编译:gcc -o add add.c -I /usr/include/lua5.1/

出现提示:

/tmp/ccPtEQyI.o: In function `luaadd':

main.c:(.text+0x23): undefined reference to `lua_getfield'

main.c:(.text+0x37): undefined reference to `lua_pushnumber'

main.c:(.text+0x4b): undefined reference to `lua_pushnumber'

main.c:(.text+0x64): undefined reference to `lua_call'

main.c:(.text+0x78): undefined reference to `lua_tonumber'

main.c:(.text+0x93): undefined reference to `lua_settop'

/tmp/ccPtEQyI.o: In function `main':

main.c:(.text+0xac): undefined reference to `luaL_newstate'

main.c:(.text+0xc2): undefined reference to `luaL_openlibs'

main.c:(.text+0xd6): undefined reference to `luaL_loadfile'

main.c:(.text+0xf8): undefined reference to `lua_pcall'

main.c:(.text+0x133): undefined reference to `lua_close'

collect2: ld returned 1 exit status

那个啥,是没有把库link过来,gcc不知道要把这些函数ld到哪里去,继续找liblua:

locate liblua

打印结果:

/usr/lib/x86_64-linux-gnu/liblua5.1-c++.a

/usr/lib/x86_64-linux-gnu/liblua5.1-c++.so

/usr/lib/x86_64-linux-gnu/liblua5.1-c++.so.0

/usr/lib/x86_64-linux-gnu/liblua5.1-c++.so.0.0.0

/usr/lib/x86_64-linux-gnu/liblua5.1.a

/usr/lib/x86_64-linux-gnu/liblua5.1.so

/usr/lib/x86_64-linux-gnu/liblua5.1.so.0

/usr/lib/x86_64-linux-gnu/liblua5.1.so.0.0.0

所以添加编译选项:gcc -o add main.c -I /usr/include/lua5.1 -llua5.1 

哦也~这下没有错误了 

 

你可以改动add.lua试试,比如在x+y后面再+10! 啊哈, what happened?

amazing script! 

——————

无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。

转载于:https://my.oschina.net/ifraincoat/blog/550872

你可能感兴趣的文章
彻底理解Javascript中的原型链与继承
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>
Spring3 MVC中使用Swagger生成API文档
查看>>
FastCGI PHP on Windows Server 2003
查看>>
LimeSDR Getting Started Quickly | LimeSDR上手指南
查看>>
JSP标签JSTL的使用(1)--表达式操作
查看>>
SAP顾问的人脉比技术更为重要
查看>>
FI/CO PA考试试卷
查看>>
汽车介质应用非常严苛?没关系,新技术带来的高精度传感器十分适应!
查看>>
天合光能 - 用计算捕捉“光的能量”
查看>>
使用sysbench压力测试MySQL(一)(r11笔记第3天)
查看>>
css知多少(11)——position
查看>>
【Spring】定时任务详解实例-@Scheduled
查看>>
先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)...
查看>>
哪些领域适合开发微信小程序
查看>>
谁说数据库防火墙风险大?可能你还不知道应用关联防护
查看>>
ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求
查看>>
怎样做一个企业?尤其是在这个互联网时代
查看>>
DVNA:Node.js打造的开源攻防平台
查看>>