有关lua require入门级问题

cbcbccb 2010-02-25 04:38:42
在linux系统同一目录下有:
test.C

int main(int argc, char **argv)
{
}

g++生成名为test的执行文件
有luatest.lua只一句

require "test"
print ('test')

执行../src/lua luatest.lua后报错:
../src/lua: error loading module 'test' from file 'test':
test:1: unexpected symbol near 'char(127)'
stack traceback:
[C]: ?
[C]: in function 'require'
luatest.lua:1: in main chunk
[C]: ?

版本Lua 5.1.4 在luatest.lua中去掉require一行后就可以打印出test。哪位高手可以帮小弟入入门,告诉小弟这是哪里的错误?谢谢谢谢
...全文
2243 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
debug time 2012-11-10
  • 打赏
  • 举报
回复
解决了没有啊 我遇到了一样的问题
renshijianyou 2012-08-16
  • 打赏
  • 举报
回复
问题解决了吗?我也遇到此问题,从一台机器移到另一台机器时出现了这个问题????????//急求?
cbcbccb 2010-03-18
  • 打赏
  • 举报
回复
传说中的沉底-_-!
cbcbccb 2010-03-08
  • 打赏
  • 举报
回复
老大们帮帮忙呀,谢谢谢谢
cbcbccb 2010-03-04
  • 打赏
  • 举报
回复
引用 9 楼 iambic 的回复:
print(package.loadlib("/home/lua/lua-5.1.4/test/libmylib.so", "luaopen_mylib"))

看下输出是什么。
老大真厉害,这招果然有输出
nil /home/lua/lua-5.1.4/test/libmylib.so: undefined symbol: luaopen_mylib init

再次感谢
cbcbccb 2010-03-03
  • 打赏
  • 举报
回复
引用 6 楼 iambic 的回复:
Lua可以加载C编译出来的.so文件,但是需要在C代码中使用Lua的API。
你可以看下《Beginning Lua Programming》的Chapter 13: Interfacing Lua with Other Languages
有没有中文的呀我现在看的是《Programming_In_Lua》,这个也可以吧?
iambic 2010-03-03
  • 打赏
  • 举报
回复
Lua可以加载C编译出来的.so文件,但是需要在C代码中使用Lua的API。
你可以看下《Beginning Lua Programming》的Chapter 13: Interfacing Lua with Other Languages
cbcbccb 2010-03-03
  • 打赏
  • 举报
回复
引用 4 楼 iambic 的回复:
1. 你是想调用C函数还是想调用C语言编译出来的程序?
2. 是谁告诉你require可以这样用的?不能想当然啊。找本Lua的书正经入门下吧。
老大教训的是,先谢过老大了。调用C函数或是调用C语言编译出来的程序不是一回事吗?PDF上面没有这种完整的事例,所以我在自己尝试。PDF上面介绍说是加载运行库,但是我在网上看到除了可以加载lua文件以外,好像还可以加载so文件或者是C语言编译出来的程序。
我想require C语言编译出来的程序为的是调用C函数-_-!
iambic 2010-03-03
  • 打赏
  • 举报
回复
print(package.loadlib("/home/lua/lua-5.1.4/test/libmylib.so", "luaopen_mylib"))

看下输出是什么。
cbcbccb 2010-03-03
  • 打赏
  • 举报
回复
俺又改了下,编写mylib.c如下
#include "all.h"
extern "C"{
#include "../src/lua.h"
#include "../src/lauxlib.h"
#include "../src/lualib.h"
}

static int stackDump (lua_State* L)
{
int i;
int top = lua_gettop(L);printf("length is %d\n", top);
for (i=1; i<=top; i++){
int t = lua_type(L,i);
switch (t){
case LUA_TSTRING:
printf("'%s'", lua_tostring(L,i));
break;
case LUA_TBOOLEAN:
printf(lua_toboolean(L,i) ? "true":"false");
break;
case LUA_TNUMBER:
printf("%g", lua_tonumber(L,i));
break;
default:
printf("$s", lua_type(L,t));
break;
}
printf(" ");
}
printf("\n");
return 0;
}

static const struct luaL_Reg mylib[] = {
{"stackDump", stackDump},
{NULL, NULL}
};

int luaopen_mylib(lua_State* L)
{
luaL_register(L, "mylib", mylib);
return 1;
}
gcc mylib.c -fPIC -shared -o libmylib.so
在test.lua中写入
package.loadlib("/home/lua/lua-5.1.4/test/libmylib.so", "luaopen_mylib")()只此一行
执行../src/lua test.lua以后报告如下错误:
../src/lua: test.lua:1: attempt to call a nil value
stack traceback:
test.lua:1: in main chunk
[C]: ?
老大能帮看看哪里有问题吗?感激不尽!!
cbcbccb 2010-03-02
  • 打赏
  • 举报
回复
没人会吗-_-!
自顶
iambic 2010-03-02
  • 打赏
  • 举报
回复
1. 你是想调用C函数还是想调用C语言编译出来的程序?
2. 是谁告诉你require可以这样用的?不能想当然啊。找本Lua的书正经入门下吧。
cbcbccb 2010-03-02
  • 打赏
  • 举报
回复
引用 2 楼 iambic 的回复:
请问你为什么要require "test"?
test是g++ test.C生成的目标程序呀。如果不是这样引用,那lua该如何调用C文件里的函数呢?老大可以写个简单的例子吗?小弟在此先放谢过了。
iambic 2010-03-02
  • 打赏
  • 举报
回复
请问你为什么要require "test"?

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧