加载DLL时Lua segfault

时间:2016-10-27 16:34:18

标签: c dll lua

我试图为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 dir只有Lua 5.3.3 src下载的.h文件,lib目录有liblua.a,我用make generic编译。它编译时没有错误,但是当我尝试在Lua脚本中使用它时,它只提供Segmentation Fault

以下是lcsin.lua

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

我只是使用lua lcsin.lua运行它,lualua32/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的不一致现在已经很长一段时间了。我已经尝试过在线示例代码,但没有任何作用。

1 个答案:

答案 0 :(得分:2)

如果问题确实在于搜索.so个文件而不是*.dll个文件,那么通过向package.cpath添加适当的模式应该很容易解决:

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

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