Probleme beim einbinden von Lua-Script



  • Hallo,

    ich habe mit der Suchfunktion im Forum keine passende Problemlösung gefunden, also frage ich 'etz mal dirket. (Ich benutze VC++ 6)

    Ich bin gerade dabei ein Adventure in OpenGL zu programmieren und wollte nun Lua als Scriptsprache verwenden. Bis jetzt kein Problem; ich habe mir die Binaries, die Libraries und den Source geholt und das grundlegende eingebunden:

    #pragma comment(lib,"OpenGL32")
    #pragma comment(lib,"GLu32")
    #pragma comment(lib,"GLAux")
    #pragma comment(lib,".\\lua\\lua")
    #pragma comment(lib,".\\lua\\lualib")
    
    #include <windows.h>
    #include <stdio.h>
    #include <math.h>
    #include <string>
    
    #include <gl\gl.h>
    #include <gl\glu.h>
    
    extern "C"
    	{
    	#include ".\lua\lua.h"
    	#include ".\lua\lualib.h"
    	#include ".\lua\lauxlib.h"
    	}
    
    using namespace std;
    

    Sobald ich aber den Befehl 'lua_dofile' verwende, kriege ich einen Unresolved-External-Error:

    --------------------Configuration: Gobbo - Win32 Debug--------------------
    Compiling...
    Main.cpp
    Linking...
    Main.obj : error LNK2001: unresolved external symbol _lua_dofile
    Debug/Gobbo.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
    Creating browse info file...
    
    Gobbo.exe - 2 error(s), 0 warning(s)
    

    Ok, dachte ich mir, da fehlt ja noch ne Library... also hab' ich die auch eingebunden:

    #pragma comment(lib,"OpenGL32")
    #pragma comment(lib,"GLu32")
    #pragma comment(lib,"GLAux")
    #pragma comment(lib,".\\lua\\lua")
    #pragma comment(lib,".\\lua\\lualib")
    #pragma comment(lib,".\\lua\\liblualib") // <----------- Neue Lib
    
    #include <windows.h>
    #include <stdio.h>
    #include <math.h>
    #include <string>
    
    #include <gl\gl.h>
    #include <gl\glu.h>
    
    extern "C"
    	{
    	#include ".\lua\lua.h"
    	#include ".\lua\lualib.h"
    	#include ".\lua\lauxlib.h"
    	}
    
    using namespace std;
    

    Wenn ich nun compiliere wirft mir der VC das an den Kopf:

    --------------------Configuration: Gobbo - Win32 Debug--------------------
    Compiling...
    Engine.cpp
    GUI.CPP
    Lua.cpp
    Main.cpp
    OpenGL.cpp
    Texture.cpp
    Linking...
    MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fclose already defined in LIBCD.lib(fclose.obj)
    MSVCRT.lib(MSVCRT.dll) : error LNK2005: __isctype already defined in LIBCD.lib(isctype.obj)
    MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fopen already defined in LIBCD.lib(fopen.obj)
    MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fread already defined in LIBCD.lib(fread.obj)
    LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library
    Debug/Gobbo.exe : fatal error LNK1169: one or more multiply defined symbols found
    Error executing link.exe.
    Creating browse info file...
    
    Gobbo.exe - 5 error(s), 1 warning(s)
    

    Hmmm... habe ich was falsch gemacht? Es tut mir übrigens leid wenn man mir eine Ohrfeige verpassen könnte, aber ich habe noch nie vorher großartig mit Libraries oder DLLs arbeiten müssen, darum habe ich auch dementsprechend wenig Erfahrung mit der Materie.

    Ach ja, wenn ich die 'Liblualib.lib' (doofes Wort :D) weglasse und den 'lua_dofile'-Command auskommentiere, funktioniert's einwandfrei, auch lua_open() oder lua_push().

    Danke für jegliche Hilfe...



  • [quote="PuerNoctis"]

    #pragma comment(lib,".\\lua\\lua")
    #pragma comment(lib,".\\lua\\lualib")
    #pragma comment(lib,".\\lua\\liblualib") // <----------- Neue Lib
    

    Die Libs sehen mir alle identisch aus. Sicher, daß Du so viele für LUA brauchst?! Und vor allem für lua_dofile() noch eine eigene?!?! 😕

    Ich würde die LUA-#pragmas mal auskommentieren, und über Projekt->Hinzufügen->Vorhandene Dateien EINMAL die nötige(n) Libs, also C:\da\wo\lua\installiert\ist\lib\lua.lib (?), hinzufügen.
    Dann nochmal versuchen.



  • hehe, auf die Idee bin ich auch schon mal gekommen, bloß dann gehen meine anderen Befehle net... der BRAUCHT irgendwie alle drei... möp 😞

    Kann es sein dass ich irgendwie so ganz doof komische Libs hab und die einfach mal mit dem Source selber bauen soll?



  • Es gibt da echt diese 3 verschiedene?!

    Also MS-Libs sehen meistens so aus: LUA.lib

    Und das Äquivalent für MingW32 (G++ für Windows) - aus der UNIX-Welt - so: libLUA.a oder libLUA.lib

    Beide wirst Du sicher nicht linken müssen.



  • Ok, test ich ma... danke...



  • Also folgendes funktioniert bei mir unter Linux:

    #include <iostream>
    using namespace std;
    #include <math.h>
    #include <string>
    
    extern "C" {
    #include <lua50/lua.h>
    #include <lua50/lualib.h>
    #include <lua50/lauxlib.h>
    }
    
    int main()
    {
    	/* the Lua interpreter */
    	lua_State* L;
    
    	/* initialize Lua */
    	L = lua_open();
    
    	/* load Lua base libraries */
    	lua_baselibopen(L);
    
    	/* run the script */
    	lua_dofile(L, "do-me.lua");
    
    	/* cleanup Lua */
    	lua_close(L);
    
    	return 0;
    }
    
    g++ -o lua main.cc -llua50 -llualib50
    

    D.h. ich linke liblua50 und liblualib50 -- bei VC dann lua50.lib und lualib50.lib.



  • bei mir gings nur, als ich mir den lua-code selbst kompiliert hatte, war aber eigentlich auch kein problem, einfach statische lib, dateien einügen, F7, fertig.
    da kommen dann wenn ich mich richtig erinnre 1 oder 2 libs raus, die du dann einbinden kann. eine ist so für standarddinger, wie zB lua_dofile und eine für komplexere (aber die hab ich glaub iuch nie gebraucht)



  • Jo danke für eure hilfe! Es hat funktioniert mit den libs einbinden

    VIELEN DANK!



  • wenn mir MsVC einen Fehler der Art "...already defined in..." an den Kopf wirft dann mache ich meistens folendes:
    Linker Option /FORCE:MULTIPLE
    und es funzt...


Anmelden zum Antworten