# Lua 5.2 in C++ einbinden



## De Handler (9. Januar 2012)

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:

```
#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:

```
print("Hallo Welt")
```

Die Pfade stimmen.

Beim Compillieren mit VC++ 2010 erscheinen folgende 2 Fehler:

```
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.

```
lua_newstate(lua_Alloc f, void *ud);
```

Kann ich die folgendermassen einsetzen?:

```
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


----------



## deepthroat (10. Januar 2012)

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ß


----------



## De Handler (10. Januar 2012)

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:

```
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


----------



## deepthroat (11. Januar 2012)

Hi.

Auf die Idee, die enthaltene Dokumentation zu lesen bist du wohl nicht gekommen? 

http://luabinaries.sourceforge.net/download.html

Gruß


----------



## De Handler (11. Januar 2012)

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


----------



## saftmeister (11. Januar 2012)

Was verwendest du denn für einen Compiler?


----------



## De Handler (11. Januar 2012)

Hallo



De Handler hat gesagt.:


> ... Compillieren mit VC++ 2010 ...



Verwende den integrierten Compiler von Microsoft.

De Handler


----------



## saftmeister (11. Januar 2012)

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.


----------



## _Grubi (11. Januar 2012)

Du dürftest die falschen Dateien haben. Schau mal hier: http://sourceforge.net/projects/luabinaries/files/5.2/Windows Libraries/

Diese hier dürfte für dich richtig sein: http://sourceforge.net/projects/lua...es/Static/lua-5.2_Win32_vc10_lib.zip/download


----------



## De Handler (11. Januar 2012)

Vielen Dank ihr beiden.

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

Doch leider treten noch immer folgende Fehler auf:

```
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


----------



## deepthroat (12. Januar 2012)

De Handler hat gesagt.:


> Hab nun das Projekt bereinigt (alle Dateien gelöscht) und eure hineinkopiert.
> 
> Doch leider treten noch immer folgende Fehler auf:


Erstmal sind das keine Fehler, sondern nur Warnungen.


De Handler hat gesagt.:


> 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?


Warum lädst du denn nicht einfach die korrekte Datei von Sourceforge runter und fügst die lua52.lib bei "additional dependencies" hinzu?

Gruß


----------

