【发布时间】:2016-10-27 16:34:18
【问题描述】:
我正在尝试为 lua 制作一个 c 扩展 dll。我有这个csin.c:
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <math.h>
static int l_sin(lua_State *L) {
double d = lua_tonumber(L, 1);
lua_pushnumber(L, sin(d));
return 1;
}
int luaopen_csin(lua_State *L) {
lua_register(L, "csin", l_sin);
return 0;
}
我正在用gcc -Wall -shared -Ilua-5.3.3/include -Llua-5.3.3/lib csin.c -o csin.dll -llua 编译它。包含目录只有来自 Lua 5.3.3 src 下载的 .h 文件,而 lib 目录有 liblua.a 我用 make generic 编译的。它编译没有错误,但是当我尝试在 Lua 脚本中使用它时,它只会给出一个Segmentation Fault。
这里是lcsin.lua:
require("csin")
print(csin(45))
我只是用lua lcsin.lua、lua 作为lua32/lua53.exe 的链接运行它,我想我是从 Lua 的二进制下载中获得的。我也尝试使用编译后的lua-5.3.3/src/lua.exe,但它说:
lua-5.3.3/src/lua: lcsin.lua:1: module 'csin' not found:
no field package.preload['csin']
no file '/usr/local/share/lua/5.3/csin.lua'
no file '/usr/local/share/lua/5.3/csin/init.lua'
no file '/usr/local/lib/lua/5.3/csin.lua'
no file '/usr/local/lib/lua/5.3/csin/init.lua'
no file './csin.lua'
no file './csin/init.lua'
no file '/usr/local/lib/lua/5.3/csin.so'
no file '/usr/local/lib/lua/5.3/loadall.so'
no file './csin.so'
stack traceback:
[C]: in function 'require'
lcsin.lua:1: in main chunk
[C]: in ?
我认为这个错误是因为编译的不是.dll 文件而是.so 文件。我正在使用cygwin。一段时间以来,Windows/Linux 的不一致一直是一个痛苦的问题。我已经在网上尝试了示例代码,但没有任何效果。
【问题讨论】:
-
它没有段错误,是吗?
-
确实有段错误