在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
反反复复学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, 2, 1); /*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(10, 15); /*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! |
请发表评论