# Lua in C++ einbinden



## Simon Programmiert (3. Jun 2018)

Hallo!
Ich programmiere erst seit kurzem C++, habe aber ein wenig erfahrung mit Lua.
Weiß jemand von euch wie man Lua in C++ einbinden kann?
Ich werde aus Artikeln im Internet nicht Schlau 

Danke im voraus,
Mfg Simon


----------



## httpdigest (3. Jun 2018)

Mehrere Möglichkeiten:
- wenn du mit deinem Lua Script per stdin/stdout/stderr Interface kommunizieren möchtest, reicht es, einen Lua Prozess als Kindprozess zu starten (hängt vom Betriebssystem ab, wie genau) und dich mit stdin/stdout/stderr zu verbinden
- wenn du engere Integration als Library haben möchtest (um z.B. den Lua Stack zu manipulieren und auszulesen), dann empfehle ich dir LuaJIT als Laufzeitumgebung und Just-In-Time Compiler. Es bietet eine C API, die auch per src/lua.hpp C++ Header eingebunden werden kann (verwendet letztlich "C" Linkage).

Für letzteren Weg folge einfach der Anleitung hier: https://en.blog.nic.cz/2015/08/12/embedding-luajit-in-30-minutes-or-so/

(Voraussetzung: Du weißt, wie man C/C++ Sourcen kompiliert und linkt und wie man Include und Library Abhängigkeiten in den entsprechenden Schritten hinzufügt/konfiguriert, abhängig von deinem verwendeten Compiler oder IDE.)

Ich habe es eben schnell selber mit folgenden Schritten unter Windows x64 mit msvc 2017 erfolgreich ausprobiert:
1. git clone https://github.com/LuaJIT/LuaJIT.git
2. cd LuaJIT/src
3. msvcbuild.bat in einer msvc shell ausführen
4. die gebaute luajit.lib als Library Abhängigkeit in deinem C/C++ Projekt einbinden und LuaJIT/src als Include Verzeichnis hinzufügen
5. Test Code 'main.cpp': 
	
	
	
	





```
#include <stdio.h>
#include <lua.hpp>
int main(int argc, char** argv) {
    lua_State* L = luaL_newstate();
    if (!L)
        return 1;
    luaL_openlibs(L);
    if (argc > 1) {
        luaL_loadfile(L, argv[1]);
        int ret = lua_pcall(L, 0, 0, 0);
        if (ret != 0) {
            fprintf(stderr, "%s\n", lua_tostring(L, -1));
            return 1;
        }
    }
    lua_getglobal(L, "test");
    printf("test: %s\n", lua_tostring(L, -1));
    lua_settop(L, 0);
    lua_close(L);
    return 0;
}
```
6. Baue dein C++ Projekt bzw. die Datei main.cpp mit dem LuaJIT/src Include Verzeichnis und LuaJIT/src Library Verzeichnis und lua51.lib als Library Abhängigkeit
7. Kopiere LuaJIT/src/lua51.dll in das Build-Verzeichnis deiner gebauten exe Datei
8. Erstelle eine Lua Datei, z.B. test.lua, mit Inhalt: `test = 1+2+3`
9. Führe deine gebaute exe Datei aus mit Kommandozeilenargument `test.lua`
10. Ausgabe: "test: 6"


----------



## Simon Programmiert (4. Jun 2018)

Vielen Dank, du hast mich jetzt um einen Schritt weitergebracht!


----------

