Lua: динамические библиотеки не включены. Как их включить?

Я получаю сообщение об ошибке в Lua

NLua.Exceptions.LuaScriptException: ошибка загрузки модуля 'socket.core' из файла '.\socket\core.dll': динамические библиотеки не включены; проверьте вашу установку Lua

строка, выдающая эту ошибку, является первой строкой кода в моем .lua

local socket = require("socket")

person ZMarotrix    schedule 19.12.2017    source источник
comment
Они должны быть включены по умолчанию при сборке Lua в Windows.   -  person lhf    schedule 19.12.2017
comment
Есть ли способ проверить? Я только что перекомпилировал Lua с 5.3.4, и у меня все еще возникает та же проблема.   -  person ZMarotrix    schedule 19.12.2017


Ответы (1)


Редактировать: извините, не правильно прочитал; этот патч для линукса, а не для винды...

К сожалению, Lua по умолчанию не компилирует динамическую библиотеку (файл .so). Я создал два файла исправлений, которые содержат необходимые изменения, поэтому Makefile создаст для вас файл .so:

Makefile

--- Makefile.orig   2017-04-26 18:12:27.442079208 +0200
+++ Makefile    2017-04-26 20:32:34.818881639 +0200
@@ -42,6 +42,9 @@
 TO_BIN= lua luac
 TO_INC= lua.h luaconf.h lualib.h lauxlib.h lua.hpp
 TO_LIB= liblua.a
+TO_LIBX=liblua.so
+TO_LIBXV=liblua.so.$(V)
+TO_LIBXR=liblua.so.$(R)
 TO_MAN= lua.1 luac.1

 # Lua version and release.
@@ -52,7 +55,7 @@
 all:   $(PLAT)

 $(PLATS) clean:
-   cd src && $(MAKE) $@
+   cd src && $(MAKE) $@ V=$(V) R=$(R)

 test:  dummy
    src/lua -v
@@ -62,12 +65,15 @@
    cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
    cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
    cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
+   cd src && $(INSTALL_EXEC) $(TO_LIBX) $(INSTALL_LIB)
+   cd $(INSTALL_LIB) && ln -s $(TO_LIBX) $(TO_LIBXV) && ln -s $(TO_LIBX) $(TO_LIBXR)
    cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN)

 uninstall:
    cd src && cd $(INSTALL_BIN) && $(RM) $(TO_BIN)
    cd src && cd $(INSTALL_INC) && $(RM) $(TO_INC)
    cd src && cd $(INSTALL_LIB) && $(RM) $(TO_LIB)
+   cd src && cd $(INSTALL_LIB) && $(RM) $(TO_LIBX)
    cd doc && cd $(INSTALL_MAN) && $(RM) $(TO_MAN)

 local:
@@ -90,6 +96,7 @@
    @echo "TO_BIN= $(TO_BIN)"
    @echo "TO_INC= $(TO_INC)"
    @echo "TO_LIB= $(TO_LIB)"
+   @echo "TO_LIBX= $(TO_LIBX)"
    @echo "TO_MAN= $(TO_MAN)"
    @echo "INSTALL_TOP= $(INSTALL_TOP)"
    @echo "INSTALL_BIN= $(INSTALL_BIN)"

источник/Makefile

--- src/Makefile.orig   2017-04-26 18:39:24.655503489 +0200
+++ src/Makefile    2017-04-26 18:40:59.715893871 +0200
@@ -29,6 +29,7 @@
 PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris

 LUA_A= liblua.a
+LUA_SO=    liblua.so
 CORE_O=    lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
    lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
    ltm.o lundump.o lvm.o lzio.o
@@ -43,7 +44,7 @@
 LUAC_O=    luac.o

 ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
+ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T)
 ALL_A= $(LUA_A)

 # Targets start here.
@@ -59,6 +60,11 @@
    $(AR) $@ $(BASE_O)
    $(RANLIB) $@

+$(LUA_SO): $(CORE_O) $(LIB_O)
+   $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
+   ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
+   ln -sf $(LUA_SO).$(R) $(LUA_SO)
+
 $(LUA_T): $(LUA_O) $(LUA_A)
    $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)

Очень надеюсь, что Lua-разработчики включат компиляцию динамических библиотек по умолчанию в код....

person eelcohn    schedule 03.03.2018