2016-11-28 3 views
2

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.

+0

Versuchen Sie '-bundle -undefined dynamic_lookup' anstelle von' -shared'. – lhf

+0

Super, ich kann jetzt das C-Modul bauen. Aber ich kann es nicht in Lua importieren. – Azinum

Antwort

1
  • herunterladen Lua von lua.org und bauen Lua mit make macosx. Siehe Getting started.

  • Verwenden Sie -bundle -undefined dynamic_lookup anstelle von -shared, um module.so zu bauen.

  • Verwenden Sie require"module", um es in Lua zu laden.

  • Anruf super.

Stellen Sie sicher, Sie laufen die lua Programm, das Sie oben aufgebaut haben, nicht eine andere Version, die installiert wird.

+0

Also habe ich. Und ich könnte C-Modul bauen, aber nicht in das Lua-Skript aufnehmen. – Azinum

+0

Ich möchte es selbst erstellen, ohne MakeFile. – Azinum

+0

@Azinum verwenden '-DLUA_USE_MACOSX' beim Erstellen von Lua. – lhf

Verwandte Themen