Lua 5.2 in C++ einbinden

De Handler

Grünschnabel
Hallo zusammen.

Ich versuche ein Hello World in Lua via C++ auf die Konsole auszugeben.
Um auf dem neusten Stand zu sein, möchte ich Lua 5.2 verwenden.

Ich hab folgenden Code verwendet:
C++:
#pragma comment(lib, "lib/lua")
#pragma comment(lib, "lib/lualib")

extern "C"
{
	#include "lua52/src/lua.h"
	#include "lua52/src/lualib.h"
	#include "lua52/src/lauxlib.h"
}

lua_State* L;
    
int main(int argc, char* argv[])
{
	L = lua_open();
	luaopen_base(L);
	luaopen_io(L);
	lua_dofile(L, "mein.lua");
	lua_close(L);

	return 0;
}

Und in mein.lua steht folgendes:
Code:
print("Hallo Welt")

Die Pfade stimmen.

Beim Compillieren mit VC++ 2010 erscheinen folgende 2 Fehler:
Code:
error C3861: "lua_open": Bezeichner wurde nicht gefunden.
error C3861: "lua_dofile": Bezeichner wurde nicht gefunden.

Ich hab gelesen, dass für lua_open eine neue Funktion verwendet werden muss.
Code:
lua_newstate(lua_Alloc f, void *ud);

Kann ich die folgendermassen einsetzen?:
Code:
lua_newstate(lua_Alloc(),0);

Und was für einen Ersatz benötige ich für lua_dotfile?

Über google hab ich leider nur die Referenz gefunden.
Bin daraus aber leider nicht viel schlauer geworden.

Kennt sich jemand genäuer mit Lua, bzw. Lua 5.2 aus?

Vielen Dank.

De Handler
 
Hi.

Statt lua_open könntest du lua_newstate verwenden. Oder du verwendest die komfortablere Funktion luaL_newstate().

Statt lua_dofile kannst du luaL_dofile verwenden.

Gruß
 
Hallo,

Vielen Dank. Der Texteditor erkennt diese Funktionen. Nun bekomm ich einen Linkerfehler, die Libs wurden nicht gefunden. Wie soll er auch, wenn ich sie nicht habe.

Daraufhin hab ich ihm libs der alten Version angegeben. Nun erscheinen folgende Fehler, auch wenn ich die libs wieder entferne:
Code:
1>luac.obj : error LNK2005: _main ist bereits in lua.obj definiert.
1>main.obj : error LNK2005: _main ist bereits in lua.obj definiert.

Ich hab die libs auf der Website von lua nicht zum Download gefunden, muss ich diese selbst generieren, und wie?

De Handler
 
Hallo

Doch, auf die Idee und diese Seite bin ich gekommen.
Doch fand ich in den Downloads keine *.lib Dateien.
Oder muss man diese liblua52.a irgendwie verwenden?

De Handler
 
Sorry, hab ich überlesen. Bei MSVC haben die Libraries die Endung .lib. Wenn es für die aktuelle Lua-Version kein MSVC-Kompilat gibt, müsstest du das selbst machen.

Da ich jetzt nicht weiß, welchen MSVC du genau einsetzt, häng ich einfach mal die 2008er und die 2010er Version an.
 

Anhänge

  • lua-5.2.0.2008.7z
    2,3 MB · Aufrufe: 18
  • lua-5.2.0.2010.7z
    4,4 MB · Aufrufe: 34
Vielen Dank ihr beiden.

Hab nun das Projekt bereinigt (alle Dateien gelöscht) und eure hineinkopiert.

Doch leider treten noch immer folgende Fehler auf:
Code:
1>luac.obj : warning LNK4006: _main ist bereits in "main.obj" definiert; zweite Definition wird ignoriert.
1>lua.obj : warning LNK4006: _main ist bereits in "main.obj" definiert; zweite Definition wird ignoriert.

Beim erstellen des Projektes hab ich ein leeres Projekt ohne irgendwas gewählt.
Müsste ich in den Projekteinstellungen noch etwas anpassen, damit der Linker diese Objektdateien korrekt interpretiert, oder ist etwas mit den Objektdateien falsch?

De Handler
 
Zurück