私はlua用のc拡張DLLを作ろうとしています。私はgcc -Wall -shared -Ilua-5.3.3/include -Llua-5.3.3/lib csin.c -o csin.dll -llua
でそれをコンパイルしていDLLをロードするときのLua segfault
#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;
}
:私はこのcsin.c
を持っています。インクルードディレクトリには、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
は私が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 ?
私はコンパイル1は.dll
ファイルが、.so
ファイルを探してされていないため、エラーがあると思います。私はcygwinを使用しています。 Windows/Linuxの不一致は、今や***の痛みです。私はサンプルコードをオンラインで試してみましたが、何も動作しません。
セグメンテーションはしませんでしたか? – lhf
それはsegfaultをしました –