c - 加载dll时Lua段错误

标签 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 编译它。包含目录只有 .h来自 Lua 5.3.3 src 下载的文件和 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 的不一致一直是一个令人头疼的问题。我已经尝试过在线示例代码,但没有任何效果。

最佳答案

如果问题确实是搜索 .so 文件而不是 *.dll 文件,则通过向 添加适当的模式应该很容易修复包.cpath:

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

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

关于c - 加载dll时Lua段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289925/

相关文章:

c - 实时多人游戏延迟补偿

c - strncat() : Random character in target string

c - Infix to Postfix 程序无法按预期工作

c++ - 需要帮助为 JNI 调用构建 DLL。 Unresolved external 引用。 Borland 编译器

c++ - Lua、线程和 C++ 异常

lua - require'd 函数的参数在 Lua 中丢失/消失了吗?

c - 使用 EXIT_SUCCESS/FAILURE 作为 API 返回值

c - 如何创建一个函数来调用变量arg函数?

java - JNI : How to delete temporary dll file on exit

c++ - 在 Windows 上编译静态 QT 应用程序