我的第一个Lua程序
辛苦的总算在ubutun中搭建完Lua的开发环境,测试一下Lua的环境
1、测试lua是否安装成功,直接运行lua就能进入编译模式
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ lua
我的第一个lua程序_lua程序的编译Lua 5.2.0    Copyright (C) 1994-2011 Lua.org, PUC-Rio
我的第一个lua程序_lua程序的编译> print("Hello World!")    
我的第一个lua程序_lua程序的编译Hello World!
我的第一个lua程序_lua程序的编译>
按ctrl+D退出
 
2、编译lua文件
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ vi test.lua
在test.lua中输入以下代码后保存
我的第一个lua程序_lua程序的编译print("-----------------------------");    
我的第一个lua程序_lua程序的编译print("Hello world");
我的第一个lua程序_lua程序的编译print("-----------------------------");
在命令行模式下输入以下命令
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ lua test.lua
我的第一个lua程序_lua程序的编译-----------------------------
我的第一个lua程序_lua程序的编译Hello world
我的第一个lua程序_lua程序的编译-----------------------------
 
3、在C文件中嵌入lua代码
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ vi a.c
在a.c文件中输入以下代码:
我的第一个lua程序_lua程序的编译#include <stdio.h>
我的第一个lua程序_lua程序的编译#include <lua.h>
我的第一个lua程序_lua程序的编译#include <lauxlib.h>
我的第一个lua程序_lua程序的编译#include <lualib.h>
我的第一个lua程序_lua程序的编译
我的第一个lua程序_lua程序的编译int main(int argc, char *argv[])
我的第一个lua程序_lua程序的编译{
我的第一个lua程序_lua程序的编译                char line[BUFSIZ];
我的第一个lua程序_lua程序的编译                lua_State *L = luaL_newstate();
我的第一个lua程序_lua程序的编译                luaL_openlibs(L);
我的第一个lua程序_lua程序的编译                //while (fgets(line, sizeof(line), stdin) != 0) printf("%s\n",line);
我的第一个lua程序_lua程序的编译  luaL_dofile(L, "test.lua");
我的第一个lua程序_lua程序的编译                lua_close(L);
我的第一个lua程序_lua程序的编译                return 0;
我的第一个lua程序_lua程序的编译}
在命令行模式下输入以下命令:
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ gcc -o a a.c -I/usr/local/include/ -L/usr/local/lib/ -llua -lm -ldl
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ ./a
我的第一个lua程序_lua程序的编译-----------------------------
我的第一个lua程序_lua程序的编译Hello world
我的第一个lua程序_lua程序的编译-----------------------------
 
编译C文件时要说明的两个问题
1、因为我安装的lua版本是lua-5.2,因为lua-5.2不认识lua_open函数,所以lua_open函数应该由luaL_newstate函数来代替
2、编译选项这里我出现了很多的错误,一会说是lua_open函数不认识,以一会又说pow函数不认识,我在网上找了不少的编译方法,都不见效
(1)方法一,不成功。使用lua_open函数,编译情况如下
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ gcc -I/usr/local/include/ -L/usr/local/lib/ -llua a.c
我的第一个lua程序_lua程序的编译a.c: 在函数‘main’中:
我的第一个lua程序_lua程序的编译a.c:9:24: 警告: 初始化时将整数赋给指针,未作类型转换 [默认启用]
我的第一个lua程序_lua程序的编译/tmp/cc5nUKNq.o: In function `main':
我的第一个lua程序_lua程序的编译a.c:(.text+0x23): undefined reference to `lua_open'
我的第一个lua程序_lua程序的编译a.c:(.text+0x33): undefined reference to `luaL_openlibs'
我的第一个lua程序_lua程序的编译a.c:(.text+0x6e): undefined reference to `lua_close'
 
(2)方法二,不成功。使用lua_open函数,编译情况如下:
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ gcc -I/usr/local/include/ -L/usr/local/lib/ a.c /usr/local/lib/liblua.a
我的第一个lua程序_lua程序的编译a.c: 在函数‘main’中:
我的第一个lua程序_lua程序的编译a.c:9:24: 警告: 初始化时将整数赋给指针,未作类型转换 [默认启用]
我的第一个lua程序_lua程序的编译/tmp/ccLLtNhW.o: In function `main':
我的第一个lua程序_lua程序的编译a.c:(.text+0x23): undefined reference to `lua_open'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lvm.o): In function `luaV_execute':
我的第一个lua程序_lua程序的编译lvm.c:(.text+0x16d8): undefined reference to `pow'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lobject.o): In function `luaO_arith':
我的第一个lua程序_lua程序的编译lobject.c:(.text+0x120): undefined reference to `pow'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_tan':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x16c): undefined reference to `tan'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_tanh':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x1ac): undefined reference to `tanh'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_sqrt':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x20e): undefined reference to `sqrt'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_sin':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x23c): undefined reference to `sin'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_sinh':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x27c): undefined reference to `sinh'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_pow':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x5d8): undefined reference to `pow'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_log':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x6ba): undefined reference to `log'
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x6ca): undefined reference to `log'
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x6ed): undefined reference to `log10'
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x700): undefined reference to `log'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_log10':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x72c): undefined reference to `log10'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_fmod':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x865): undefined reference to `fmod'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_exp':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x88c): undefined reference to `exp'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_cos':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x8cc): undefined reference to `cos'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_cosh':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x90c): undefined reference to `cosh'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_atan':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x94c): undefined reference to `atan'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_atan2':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x9a8): undefined reference to `atan2'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_asin':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x9ec): undefined reference to `asin'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_acos':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0xa2c): undefined reference to `acos'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(loadlib.o): In function `ll_loadfunc':
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x8e9): undefined reference to `dlsym'
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x950): undefined reference to `dlopen'
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x981): undefined reference to `dlerror'
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x9a1): undefined reference to `dlerror'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(loadlib.o): In function `gctm':
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0xd1c): undefined reference to `dlclose'
 
(3)方法三,不成功。使用lua_open函数,与方法二相比多了-lm,编译情况如下
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ gcc -I/usr/local/include/ -L/usr/local/lib/ -lm -DLUA_USE_READLINE a.c /usr/local/lib/liblua.a
我的第一个lua程序_lua程序的编译a.c: 在函数‘main’中:
我的第一个lua程序_lua程序的编译a.c:9:24: 警告: 初始化时将整数赋给指针,未作类型转换 [默认启用]
我的第一个lua程序_lua程序的编译/tmp/ccqm5luQ.o: In function `main':
我的第一个lua程序_lua程序的编译a.c:(.text+0x23): undefined reference to `lua_open'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lvm.o): In function `luaV_execute':
我的第一个lua程序_lua程序的编译lvm.c:(.text+0x16d8): undefined reference to `pow'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lobject.o): In function `luaO_arith':
我的第一个lua程序_lua程序的编译lobject.c:(.text+0x120): undefined reference to `pow'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_tan':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x16c): undefined reference to `tan'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_tanh':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x1ac): undefined reference to `tanh'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_sqrt':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x20e): undefined reference to `sqrt'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_sin':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x23c): undefined reference to `sin'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_sinh':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x27c): undefined reference to `sinh'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_pow':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x5d8): undefined reference to `pow'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_log':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x6ba): undefined reference to `log'
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x6ca): undefined reference to `log'
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x6ed): undefined reference to `log10'
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x700): undefined reference to `log'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_log10':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x72c): undefined reference to `log10'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_fmod':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x865): undefined reference to `fmod'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_exp':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x88c): undefined reference to `exp'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_cos':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x8cc): undefined reference to `cos'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_cosh':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x90c): undefined reference to `cosh'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_atan':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x94c): undefined reference to `atan'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_atan2':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x9a8): undefined reference to `atan2'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_asin':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0x9ec): undefined reference to `asin'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(lmathlib.o): In function `math_acos':
我的第一个lua程序_lua程序的编译lmathlib.c:(.text+0xa2c): undefined reference to `acos'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(loadlib.o): In function `ll_loadfunc':
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x8e9): undefined reference to `dlsym'
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x950): undefined reference to `dlopen'
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x981): undefined reference to `dlerror'
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0x9a1): undefined reference to `dlerror'
我的第一个lua程序_lua程序的编译/usr/local/lib/liblua.a(loadlib.o): In function `gctm':
我的第一个lua程序_lua程序的编译loadlib.c:(.text+0xd1c): undefined reference to `dlclose'
 
 (4)方法四,不成功,使用lua_open函数,与方法三相比增加了-ldl,编译情况如下:
我的第一个lua程序_lua程序的编译tao@tao:~/lua-5.2.0$ gcc -o a a.c -I/usr/local/include/ -L/usr/local/lib/ -llua -lm -ldl
我的第一个lua程序_lua程序的编译a.c: 在函数‘main’中:
我的第一个lua程序_lua程序的编译a.c:9:24: 警告: 初始化时将整数赋给指针,未作类型转换 [默认启用]
我的第一个lua程序_lua程序的编译/tmp/cctbGHDQ.o: In function `main':
我的第一个lua程序_lua程序的编译a.c:(.text+0x23): undefined reference to `lua_open'
 
(5)方法五,成功,修改lua_open函数为luaL_newstate函数,再用同样的编译命令编译,成功
 
 
多查资料,多试验,相信自己一定可以学好Lua的,唉,领导给的任务,好好学习