我正在尝试为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
编译它。包含目录只有 .h
来自 Lua 5.3.3 src 下载的文件和 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 的不一致一直是一个令人头疼的问题。我已经尝试过在线示例代码,但没有任何效果。
最佳答案
如果问题确实是搜索 .so
文件而不是 *.dll
文件,则通过向 添加适当的模式应该很容易修复包.cpath
:
package.cpath = package.cpath..";./?.dll"
require("csin")
假设csin.dll
位于当前文件夹中,它应该能够找到并加载它。
关于c - 加载dll时Lua段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289925/