Ich dachte daran, Lua aus Quellcode zu kompilieren und dann ein C-Modul zu erstellen. Ich kompilierte Lua mit Erfolg, aber ich kann mein C-Modul nicht bauen.Lua aus Quelle kompilieren und C-Modul damit erstellen
Also, ich Lua wie folgt zusammengestellt:
gcc -o Lua *.c -Os -std=c99
Zusammengestellt mein Modul wie folgt aus:
gcc -Wall -shared -fPIC -o module.so -I. module.c
Aber es gibt ein paar Fehler hier:
Undefined symbols for architecture x86_64:
"_lua_pushcclosure", referenced from:
_luaopen_module in module-fb0b1f.o
"_lua_pushnumber", referenced from:
_super in module-fb0b1f.o
"_lua_setglobal", referenced from:
_luaopen_module in module-fb0b1f.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Das C-Modul selbst:
#include "lua.h"
static int super(lua_State* L) {
lua_pushnumber(L, 5);
return 1;
}
int luaopen_module(lua_State* L) {
lua_register(L, "super", super);
return 0;
}
Mein Lua Script:
require("module")
print(super())
Ich bin auf Unix-basiertes System (Mac), aber ich möchte es auch auf Linux arbeiten.
Edit:
Problem C-Modul kompiliert wurde von -bundle -undefined dynamic_lookup
Eingabe festgelegt statt -shared
(Danke lhf). Aber ich kann das Modul nicht in Lua importieren.
> require("module")
error loading module 'module' from file './module.so':
dynamic libraries not enabled; check your Lua installation
Eine andere Sache: Dies ist nur eine schnelle Lösung zu sein scheint; -bundle -undefined dynamic_lookup
. Dies funktioniert nicht unter Linux. Wie kann ich das unter Linux tun? Ich wollte eine Lösung für Unix-basierte Systeme.
Versuchen Sie '-bundle -undefined dynamic_lookup' anstelle von' -shared'. – lhf
Super, ich kann jetzt das C-Modul bauen. Aber ich kann es nicht in Lua importieren. – Azinum