2016-10-27 13 views
2

私は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.lualuaは私が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の不一致は、今や***の痛みです。私はサンプルコードをオンラインで試してみましたが、何も動作しません。

+0

セグメンテーションはしませんでしたか? – lhf

+0

それはsegfaultをしました –

答えて

2

問題ではなく*.dllファイルの.soファイルを検索して確かであれば、package.cpathに適切なパターンを追加することで解決するのは簡単でなければなりません:csin.dllを想定し

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

はそれが必要、現在のフォルダにありますそれを見つけて読み込むことができます。

+0

'動的ライブラリは有効になっていません。あなたのLuaのインストールを確認してください。私は 'make mingw'で' lua.exe'をコンパイルしました。 –

+0

LUA自身を 'MYCFLAGS =" - DLUA_USE_DLOPEN "'でコンパイルするか、 '_WIN32'を定義してLUA_DL_DLLを有効にする必要があります。詳細は 'luaconf.h'をチェックしてください。 –

+0

ありがとうございました!今はうまくいく! –

関連する問題