Code Bye

lua脚本讨教

 本人在linux行安装了lua-5.1.4,luasql-2.1.1。在test.lua中代码:
local luasql = require “luasql.mysql”
print(“hello world”);
假如单独的执行lua test.lua ,没有任何的错误,会输出:hello world。
但是在C文件中调用这个test.lua,就会提示错误:
lua_pcall failed:error loading module “luasql.mysql” from file “/usr/local/lib/lua/5.1/luasql/mysql.so”:
/usr/local/lib/lua/5.1/luasql/mysql.so: undefined symbol: lua_pushlstring
C文件中的代码也很简单

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
int main(int argc,char**argv)
{
int ret = 0 ;
lua_State * l = luaL_newstate() ;        //创建lua运行环境
if ( l == NULL ) {
printf(“luaL_newstat() failed\n”);
return 1;
}
luaL_openlibs(l);

ret = luaL_loadfile(l,”test.lua”) ;      //加载lua脚本文件
if ( ret != 0 )  {
printf(“luaL_newstat() failed\n”);
return 1;
}
ret = lua_pcall(l,0,0,0) ;
if ( ret != 0 ) printf(“lua_pcall failed:%s\n”,lua_tostring(l,-1)) ;
lua_close(l) ;                     //释放lua运行环境
return 0 ;
}
C文件的编译命令是:gcc -o test test.c -I/usr/local/lua/include/ -L/usr/local/lua/lib/ /usr/local/lua/lib/liblua.a -llua -lm -ldl
这是咋回事呀?先谢过各位了。

解决方案

10

把#include <lauxlib.h>改为#include <luaxlib.h>
引用:

 本人在linux行安装了lua-5.1.4,luasql-2.1.1。在test.lua中代码:
local luasql = require “luasql.mysql”
print(“hello world”);
假如单独的执行lua test.lua ,没有任何的错误,会输出:hello world。
但是在C文件中调用这个test.lua,就会提示错误:
lua_pcall failed:error loading module “luasql.mysql” from file “/usr/local/lib/lua/5.1/luasql/mysql.so”:
/usr/local/lib/lua/5.1/luasql/mysql.so: undefined symbol: lua_pushlstring
C文件中的代码也很简单

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
int main(int argc,char**argv)
{
int ret = 0 ;
lua_State * l = luaL_newstate() ;        //创建lua运行环境
if ( l == NULL ) {
printf(“luaL_newstat() failed\n”);
return 1;
}
luaL_openlibs(l);

ret = luaL_loadfile(l,”test.lua”) ;      //加载lua脚本文件
if ( ret != 0 )  {
printf(“luaL_newstat() failed\n”);
return 1;
}
ret = lua_pcall(l,0,0,0) ;
if ( ret != 0 ) printf(“lua_pcall failed:%s\n”,lua_tostring(l,-1)) ;
lua_close(l) ;                     //释放lua运行环境
return 0 ;
}
C文件的编译命令是:gcc -o test test.c -I/usr/local/lua/include/ -L/usr/local/lua/lib/ /usr/local/lua/lib/liblua.a -llua -lm -ldl
这是咋回事呀?先谢过各位了。

10

LUA_CPATH, LUA_PATH 没指定.

20

你没链接liblua.a的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明lua脚本讨教