lua statische Lib

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

lua statische Lib

Beitrag von X0r »

Moin,
für ein Projekt benötige ich lua als statische Lib (DLL kommt nicht in Frage). Vor geraumer Zeit gab es hier mal etwas von realsource.de. Leider finde ich auf der Seite nichts mehr dazu.

Kann mir jemand weiterhelfen?
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: lua statische Lib

Beitrag von GPI »

einfach über
https://www.lua.org/
auf
http://lua-users.org/wiki/LuaBinaries
dann hierhin:
http://luabinaries.sourceforge.net/
und nach ein paar klicks hier hin:
https://sourceforge.net/projects/luabin ... Libraries/

Such dir eine passende Version raus :)
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Re: lua statische Lib

Beitrag von X0r »

Ich habe mir gerade die statische Lib der neusten Lua-Version gezogen. In PureBasic erhalte ich beim Einbinden zahlreiche Linker-Fehler. Liegt dies daran, dass die statische Lib von Lua nicht mit VC++6 kompiliert wurde?
Ich habe auch eine ältere Version von Lua heruntergeladen, da es hierfür eine in VC++6 komplierte statische Bibliothek gibt. Merkwürdigerweise erhalte ich dennoch Linker-Fehler.
Bei der von ts-soft mit VC++6 kompilierten Version von Lua 5.2 scheint es keine Probleme zu geben.

Wie kann das sein?
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: lua statische Lib

Beitrag von mk-soft »

32/64bit Version?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: lua statische Lib

Beitrag von GPI »

Leider sind die Libs abhängig von Standard-Zeug, das von den Compiler-Bibliotheken her kommen. Die werden wohl nicht mitgelinkt, weil das in Hauptprogramm erfolgt.

Ich hab jetzt mal versucht, mit Pelle-C eine LIB zu erzeugen, aber dann fehlen den Linker "__stdo" "__local" und noch eine. Ich hab zwar die Lib in Pelles-C finden können, wo die definiert werden, anschließend lässt sich aber das PB-Programm nicht mehr starten. Ich schätze mal, da beißt sich irgenwas.

Ich vermute, das die Fehler mit der Standard-Ausgabe/Fehlerkanal zu tun hat. Man müsste da alles aus der LUA-Library entfernen, dann könnte es klappen. Aber so gut kenn ich mich in LUA-Sourcecode nicht aus und von den Bibliotheken von Pelle-C hab ich noch weniger Ahnung. Es wäre hilfreich, was die einzelnen Links bedeuten.

Auch praktisch wäre, wenn man wüsste, wie ts-Soft die libs erstellt hat.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Re: lua statische Lib

Beitrag von X0r »

Wieso mit Pelle-C? Du solltest die Lib mit VC++6 kompilieren. Ich werde das demnächst ausprobieren.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: lua statische Lib

Beitrag von GPI »

X0r hat geschrieben:Wieso mit Pelle-C? Du solltest die Lib mit VC++6 kompilieren. Ich werde das demnächst ausprobieren.
<hust> sollte?

Ich hab kein VC6++ von daher kann ich da auch rein gar nichts testen. Aber LUA ist strikt in ANSI-C geschrieben und imo der Linker von PB ja von Pelle. Prinzipell geht es ja, es wird eine LIB erzeugt.

Vorallen möchte ich eine 64-Bit LUA. Oder besteht das Problem mit Quads als rückgabewert nur mit Prototypen?
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Re: lua statische Lib

Beitrag von X0r »

So, hab es gerade mit VC++6 getestet, hier das Ergebnis:

ts-soft hat lua über die Option /MD kompiliert. Damit wird die VCRT nicht statisch eingebunden...
Ist bei VC++6 wohl kein Problem, da die Laufzeitbibliotheken hierfür auf jedem Windows, zumindest ab Windows XP, vorinstalliert sein sollten.
Kompiliere ich lua über /MT (statisches Linken gegen VCRT), so ergeben sich bei der Nutzung in PureBasic wieder Linker-Fehler:
POLINK: error: Unresolved external symbol '___mb_cur_max'.
POLINK: error: Unresolved external symbol '__pctype'.
POLINK: error: Unresolved external symbol '__HUGE'.
POLINK: fatal error: 3 unresolved external(s).
Letztlich komme ich wohl nicht drum herum, zumindest die VCRT dynamisch und nicht statisch einzubinden.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: lua statische Lib

Beitrag von edel »

GPI hat geschrieben:
X0r hat geschrieben:Wieso mit Pelle-C? Du solltest die Lib mit VC++6 kompilieren. Ich werde das demnächst ausprobieren.
<hust> sollte?

Ich hab kein VC6++ von daher kann ich da auch rein gar nichts testen. Aber LUA ist strikt in ANSI-C geschrieben und imo der Linker von PB ja von Pelle. Prinzipell geht es ja, es wird eine LIB erzeugt.

Vorallen möchte ich eine 64-Bit LUA. Oder besteht das Problem mit Quads als rückgabewert nur mit Prototypen?
Das funktioniert auch ganz gut mit Pelles C. X0r hat aber bereits darauf hingewiesen das es es nur dynamisch funktioniert. Das mag unter VC6 nicht auffallen weil die Bibliotheken eh alle vorhanden sind, bei Pelles C aber nicht, da benoetigst du die Runtime (pocrt64.dll) im Pfad.

Stell die Option auf Multithreaded (DLL) /MD und importiere pocrt64 und crt64

Code: Alles auswählen

Import "lua-534.lib"
  luaL_newstate()
  luaL_openlibs(L)
  luaL_loadstring(L, str.p-utf8)
  lua_pcallk(L, n, r, f, c, kf)
  lua_tolstring(L, i, len)
  lua_tonumberx.d(L,i, *i)
  lua_tointegerx.q(L,i, *i)
  lua_gettop(L)
EndImport

Macro lua_tostring(L,i)
  lua_tolstring(L,i, #Null)
EndMacro  

Macro lua_pcall(L,n,r,f)
  lua_pcallk(L, n, r, f, 0, #Null)
EndMacro

Macro lua_dostring(L, s )
  luaL_loadstring(L, s)
  lua_pcall(L, 0, -1, 0)
EndMacro

Import "C:\Program Files\PellesC\Lib\pocrt64.lib"
EndImport
Import "C:\Program Files\PellesC\Lib\crt64.lib"
EndImport

L = luaL_newstate()
luaL_openlibs(L)        
lua_dostring(L, "return 1234567890123456789, 333.34443+5,'test lalala'" )
lua_gettop(L)
Debug PeekS(lua_tostring(L,-2), -1, #PB_UTF8)
Debug lua_tointegerx(L, -3, #Null)
Debug lua_tonumberx(L, -2, #Null)
Debug PeekS(lua_tostring(L,-1), -1, #PB_UTF8)
Antworten