Lua在加载dll时崩溃

我正在尝试为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进行编译。 include目录中只有Lua 5.3.3源代码下载中的“.h”文件,lib目录中有我使用make generic编译的liblua.a。它可以编译而不出错,但是当我尝试在Lua脚本中使用它时,它只是给出了一个Segmentation Fault

这是lcsin.lua

require("csin")
print(csin(45))

我只是用lua lcsin.lua运行它,lua是指向Lua二进制下载中的lua32/lua53.exe,我认为我从那里获得了它。我也试过使用编译好的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的不一致已经让人头疼了一段时间。我试过在线上的例子代码,但什么也不起作用。

点赞
用户1442917
用户1442917

如果问题确实与搜索 .so 文件有关而不是 *.dll 文件,那么只需向 package.cpath 添加相应的模式即可轻松修复:

package.cpath = package.cpath..";./?.dll"
require("csin")

假设 csin.dll 在当前文件夹中,它应该能够找到并加载它。

2016-10-27 19:14:24