PureBasic UsePNGImageEncoder()

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • PureBasic UsePNGImageEncoder()

      Hi,
      direkt nach dem Aufruf von UsePNGImageEncoder() erhalte ich folgende Fehlermeldung:



      PureBasic - Linker error

      /home/jogo/purebasic/purelibraries/linux/libraries/libpbpng.a(pngrutil.o): In Funktion `png_inflate_claim':
      pngrutil.c:(.text+0x343): Nicht definierter Verweis auf `inflateValidate'
      collect2: error: ld returned 1 exit status


      PureBasic 5.72 / Mint 18.3

      UseJPEGImageEncoder() funktioniert.
      Könnte das jemand bestätigen bzw. dazu einen Tip geben?

      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • Es klingt danach, als würde die Funktion 'inflateValidate' in deiner zlib-Version fehlen. Erst ab Ubuntu 18.04 ist sie wohl vorhanden.

      Der Workaround, den du für den IDE-Start benutzt, bringt hier vermutlich nichts, da der Fehler ja erst beim Kompilieren auftritt. Und der Compiler (bzw. Linker) weiß ja nichts von deiner speziellen zlib-Version und nutzt daher die im globalen Lib-Ordner installierte.

      Ich wüsste jetzt auch keine elegante Lösung hierfür. Eventuell wirst du doch eine neuere zlib-Version global installieren müssen; das birgt halt das Risiko, dass das System danach nicht mehr läuft...
    • ok - da hat mich das kleine Problemchen also wieder eingeholt...

      ich könnte ja mal versuchen die neue libz.so.1.2.11 nach /lib/x86_64-linux-gnu kopieren. Das allein wird aber noch nichts bewirken.
      Der Knackpunkt ist die libz.so.1 - da müßte ich die alte sichern/umbenennen und dann die neue dort hin kopieren.
      Und wenn dann irgendwas klemmt, mach ich das wieder rückgängig.


      Würde das vllt. mit einem Script gehen, das je nach Parameter die gewünschte libz.so.1 zB. aus /home/jogo/zlib/switch/ nach /lib/x86_64-linux-gnu kopiert. Parameter 1 ist halt die Alte / Parameter 2 die Neue.

      Das Script dann mit sudo starten. (oder ohne sudo und das Script in sudoers eintragen)
      Und das mach ich dann nur, wenn der Linker rumheult.

      Natürlich erst mal manuell testen, ob der Plan Sinn macht.

      Was könnte denn im schlimmsten Fall passieren - bleibt das System bedienbar?

      Für welche Sachen ist die zlib eigtl. zuständig?
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • Zlib ist zuständig für Kompression und dürfte von sehr vielen Anwendungen benutzt werden.

      Jetzt wo ich nochmal nachgedacht habe, ist es doch nicht exakt dasselbe Problem wie mit der IDE: Denn im Falle der IDE ging es ja um eine Shared-Library (also .so Dateiendung) und hier geht es anscheinend um die statische Library (.a Endung). Also Purebasic linked die Anwendung vermutlich statisch gegen Zlib. Von daher würde das Kopieren der Shared-Library gar nichts bringen.

      In dem anderen Thread hattest du erwähnt, dass Purebasic eine eigene "zlib.a" mitliefert. Ich nehme mal an, dass diese dann auch beim Linken verwendet wird. Von daher könnte es sich doch um einen Fehler seitens Purebasic handeln. Du hattest dort auch erwähnt, dass du die zlib.a von Purebasic 5.71 in den neuen Ordner kopiert hast; hast du das mittlerweile rückgängig gemacht?
    • sorry für die Sendepause - ist sonst nicht meine Art.
      Hab mir ein Aquarium angeschafft. Und das hat mich dermaßen eingenommen, um tatsächlich die Programmierung Monatelang komplett ruhen zulassen.
      Hätte nie geglaubt, daß so etwas geht...

      Habe nochmals alle 5.72 Dateien frisch entpackt - gleiche Meldung.
      Wie du bereits vermutet hast, brachte das Kopieren der neuen zlib 1.2.11 ins Shared-lib Verzeichnis auch nix (ausser, daß ich die IDE dann ohne mein Startscript starten konnte)

      Dann hab ich mal testweise PB 5.72 auf Mint 19.3 (= Ubuntu 18.04) installiert. Dort looft alles wie geschmiert.
      Die zlib 1.2.11 war dort standardmäßig an Bord.

      Das allein kann es aber nicht sein, weil ich die zlib 1.2.11 ja auch testweise unter Mint 18.3 global am laufen hatte.
      Also muß in Mint 19.3 noch irgendwas anders sein, was mit png zu tun hat (der jpeg-Encoder geht ja).

      Ich vermute mal, daß da noch eine oder mehr Libs dran hängen, die ich in Mint 18.3 rein basteln müßte, Befürchte aber, daß ich dadurch mein System destabilisieren könnte, oder?
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • Also ich denke, dass das Problem an der Zlib liegt, da die fehlende Funktion "inflateValidate" aus Zlib stammt. Dass die Zlib dann von der libpng aufgerufen wird, ist eher nebensächlich.

      Im Gegensatz zum Problem mit dem IDE-Start geht es hier halt um die statische Zlib (.a Endung) und nicht die dynamische (.so).

      Daher wäre die Frage: Gibt es im Ordner "/home/jogo/purebasic/purelibraries/linux/libraries/" eine libz.a? Falls es die nicht gibt, benutzt er vermutlich die libz.a in /lib/x86_64-linux-gnu. Und ich vermute mal du hast nur die .so von der neueren Zlib kopiert, aber nicht die .a oder?
    • im Ordner "/home/jogo/purebasic/purelibraries/linux/libraries/" befindet sich eine zlib.a

      in "/lib/x86_64-linux-gnu/" hab ich in der Tat nur die beiden neuen .so rein kopiert (1x libz.so.1.2.11 & 1x libz.so.1)

      eine libz.a oder ähnlich ist dort garnicht vorhanden.

      den alten symlink libz.so.1 hab ich vorher in libz.so_128.1 umbenannt und die libz.so.1.2.8 so gelassen, wie sie ist.

      Ich schau gleich nochmal in Mint 19.3 "/lib/x86_64-linux-gnu/" nach, ob da noch eine .a zu finden ist...

      Edit: In 19.3 siehts genauso aus / zumindest, was die libz.so betreffen...
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von JörgG ()

    • also wenn die Funktion "inflateValidate" zur zlib.a gehört, habe ich folgende Vermutung:
      libpbpng.a ruft u.a. zlib.a auf.
      Und diese ruft wahrscheinlich dann irgendeine Funktion aus dem Linux-System auf - In 19.3 passt es, aber in 18.3 fehlt was bzw. ist was anders.

      Ist meine Vermutung - mag auch völlig anders sein..

      Mein Hintergrundwissen reicht nicht aus, um Zielgerichtet den "Ausführungsweg" abzuklopfen, um vllt. die passende lib aus 19.3 nach 18.3 zu kopieren (falls es überhaupt Sinn macht).
      Das mit der neuen libz.so.1.2.11 war ja schon gewagt - aber bis jetzt ist alles friedlich. Systemupdates sind auch schon durch, und da wird sie sicherlich auch benötigt.
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • mir ist grad aufgefallen, das libz.so.1 nicht vom Typ "Verknüpfung mit..." war, sondern genau wie die libz.so.1.2.11 als "gemeinsame Bibliothek" in "/lib/x86_64-linux-gnu/" stand.


      Das habe ich dann angepasst. Die libz.so.1 war nun (wie auch die andere zuvor) eine "Verknüpfung mit libz.so.1.2.11"

      (also exakt das selbe Pärchen, wie in Mint 19.3)

      Alles schick - dachte ich...


      IDE startet - aber nun erhalte ich nach Start des Programms mit den Aufruf von UsePNGImageEncoder() diese Meldung:


      PureBasic - Linker error


      /usr/bin/ld: /home/jogo/purebasic/purelibraries/linux/libraries/libpbpng.a(pngrutil.o): undefined reference to symbol 'inflateValidate@@ZLIB_1.2.9'
      //lib/x86_64-linux-gnu/libz.so.1: error adding symbols: DSO aus der Kommandozeile fehlt
      collect2: error: ld returned 1 exit status


      Vllt. ist das die richtige Spur, weil diese Meldung etwas mehr verrät.
      Allerdings kann ich sie nicht richtig deuten..
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • Interessant ist ja, daß dieses Problem dort nicht zur Sprache gekommen ist. Scheint keiner mit Mint 18.3 zusammen mit PB 5.72 zu arbeiten.
      Vllt. ist ab PB 5.72 ja auch erst ab Mint 19.x (= Ubuntu 18.04) vorgesehen.

      Aber wie du schon sagst, dort mal nachfragen, ist eine gute Idee...
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • JörgG schrieb:

      Scheint keiner mit Mint 18.3 zusammen mit PB 5.72 zu arbeiten.
      Warum sollte er auch? Ubuntu, die neueste Version, kostet nichts, PB, die neueste Version, kostet nichts und alte Computer zum Entwickeln von Software wird auch kaum einer nutzen, weil wenn der Computer beim start der Entwicklung veraltet ist, dann wird er bei Fertigstellung kaum noch laufen.
      Gruß Thomas

      "Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
      ComputerInfo für PPF
    • JörgG schrieb:

      mir ist grad aufgefallen, das libz.so.1 nicht vom Typ "Verknüpfung mit..." war, sondern genau wie die libz.so.1.2.11 als "gemeinsame Bibliothek" in "/lib/x86_64-linux-gnu/" stand.

      Das habe ich dann angepasst. Die libz.so.1 war nun (wie auch die andere zuvor) eine "Verknüpfung mit libz.so.1.2.11"

      Hm, die Tatsache, dass das zu einer anderen Linker-Fehlermeldung führt, deutet daraufhin, dass vielleicht doch die .so und nicht die .a-Datei benutzt wird.



      JörgG schrieb:


      PureBasic - Linker error


      /usr/bin/ld: /home/jogo/purebasic/purelibraries/linux/libraries/libpbpng.a(pngrutil.o): undefined reference to symbol 'inflateValidate@@ZLIB_1.2.9'
      //lib/x86_64-linux-gnu/libz.so.1: error adding symbols: DSO aus der Kommandozeile fehlt
      collect2: error: ld returned 1 exit status

      Habe ein bißchen gegoogelt und es klingt so, als käme dieser Fehler, wenn dem Linker nicht explizit mitgeteilt wird, gegen die libz.so zu linken. Aber wenn das so wäre, dürfte Purebasic ja auch auf dem neueren System nicht funktionieren. Also ich bin hier mit meinem Verständnis auch am Ende..

      Das einzige, was ich mir noch vorstellen könnte, wäre, wenn es mit dem modifizierten LD_LIBRARY_PATH zusammenhängt. Oder hast du den LD_LIBRARY_PATH wieder zurückgesetzt?
    • naja, ich hab die IDE direkt gestartet (also ohne das Script, welches die Variable setzt).
      Das hat dann auch funktioniert, nachdem ich die neue libz ins globale /lib-Verzeichnis kopiert habe (vorher - mit der alten libz ging das ja garnicht).
      Demnach gehe ich davon aus, das sie korrekt funktioniert.

      Die neue libz.so.1 war aber nach dem rein kopieren nicht mehr als Link auf die libz.so.1.2.11 ausgewiesen (wie zuvor das alte libz-Pärchen), sondern auch als normale Bibliothek, wie die libz.so.1.2.11 auch.
      Der IDE-Start und der Rest von Linux funktionierte aber trotzdem.

      Habe dann aus Mint 19.3 einfach das org. Pärchen libz.so.1 + libz.so.1.2.11 nach Mint 18.3 kopiert.

      Der IDE-Start und der Rest von Linux funktionierte weiterhin, nur die Compilermeldung war dann plötzlich eine andere (wie in #9).


      /usr/bin/ld ist ein Link zu usr/bin/x86_64-linux-gnu-ld

      Vllt. geht der Faden ja dort weiter. Ich vergleiche das nochmal alles mit der Mint 19.3 Umgebung - mal schaun...

      Möglicherweise ist ja an dieser Stelle wirklich ein PB-Versionsschnitt auf eine neuere Linuxversion gemacht worden.
      Bis PB-5.71 lief das ja in Mint 18.3 // Ein entsprechender Hinweis wär ganz hilfreich gewesen - aber gut..

      Meine Haupt-PCs laufen alle perfekt mit Mint 18.3 und dank den vorgeschalteten Script auch PB 5.72
      Falls dann doch mal was klemmt (wie jetzt z.B. bei UsePNGImageEncoder()), nehme ich dafür halt temporär meinen Mint 19.3 Testrechner (muß dann allerdings das Projekt auch dort zu Ende führen und pflegen).

      Könnte ja auch mal meinen MX 19.3 Rechner probieren. Steht zwar bissl weiter weg, aber für Notfälle kein Ding.
      Ist ja nur, falls ich mit PureBasic > 5.71 mal auf die Fresse fliege :-)
      Ist bis jetzt auch das Einzige, was klemmt - ansonsten :top:

      Danke fürs mit tüfteln & die Ideen - gelernt hab ich alle Male was
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • Also mir kam da noch eine Idee ;-)

      Es wäre vielleicht hilfreich, rauszufinden, welche Argumente genau an den Linker "ld" übergeben werden. Eventuell hilft das beim Eingrenzen des Fehlers. Dazu müsstest du den Command-Line-Compiler von Purebasic benutzen.

      Ich weiß nicht, ob der anzeigt, welche Argumente er an "ld" übergibt, aber falls nicht, könnte man es mit folgendem Befehl versuchen:

      Quellcode

      1. strace -s 400 -Tfe execve ./pbcompiler testprogramm.pb

      Hierfür als "testprogramm.pb" einfach ein simples Programm nehmen, welches die libpng benutzt. Der ganze Befehl muss wahrscheinlich als root ausgeführt werden. In der Ausgabe sieht man dann alle ausgeführten Subprozesse, und hoffentlich auch den Linker-Aufruf.

      Die gesuchte Zeile dürfte ungefähr so anfangen:

      Quellcode

      1. [pid 164] execve("/usr/bin/ld", ["/usr/bin/ld", ......
    • ok - hab ich glatt mal geprobt:

      jogo@jogo-ThinkPad-T500 ~/purebasic/compilers $ strace -s 400 -Tfe execve ./pbcompiler /home/jogo/pureprojekte/0_testkram/bild_bauen_speichern.pb
      execve("./pbcompiler", ["./pbcompiler", "/home/jogo/pureprojekte/0_testkram/bild_bauen_speichern.pb"], [/* 76 vars */]) = 0 <0.000286>

      ******************************************
      PureBasic 5.72 (Linux - x64)
      ******************************************

      Loading external modules...
      Error: Can't load OS libraries, please re-install PureBasic.
      +++ exited with 1 +++


      mit sudo genau das gleiche.
      Bei einem anderen Rechner (ohne die aktuelle libz im globalen /lib-Verzeichnis) ebenfalls die das Gleiche.
      Vermutlich ist der Command-Line-Aufruf bzw. die Parameter/Argumente nicht korrekt.

      Werd mal noch bissl rumfummeln..
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • hab mich mal überwunden und im engl. PureBasic-Forum nachgefragt.
      Mal schaun, vllt. haben die Jungs ja dort einen Tip.

      Mir würde ja auch schon reichen, wenn klar gesagt wird, das PB ab 5.72 mindestens Ubuntu 18.04 voraussetzt.
      Wär dann auch nicht sooo dramatisch.

      Mein Plan B:
      Da meine 18.3 Rechner untereinander via Remmina+Vino alle erreichbar sind, würde ich im Bedarfsfall (der ja eher selten auftritt) meinen Mint 19.3 PC dafür vorbereiten und via wakeonlan anschalten und ebenfalls mit Remmina+Vino bedienen.

      Der steht also irgendwo nackig in der Ecke und hängt im LAN.
      Dann müßte ich noch nicht mal aufstehen und könnte sogar auf 2 PCs gleichzeitig programmieren :-)

      Wenn sich irgendwas in dieser Richtung ergibt bzw. ich was erfahre, gebe ich hier natürlich sofort Laut..
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • Die älteren Versionen der Libs haben Sicherheitsprobleme. Da der Support der Distributionen eingestellt wurde, wird sich da auch nichts mehr tun. Es ist auf keinen Fall ratsam solch ältere Versionen (ungepatcht) weiter zu nutzen.

      Fred (Author von PB) ist sich dieser Probleme bewußt und sucht diesbezüglich noch alternativen, die hier aber nichts nutzen werden. Er sucht im engl. Forum diesbezüglich noch Hinweise. Der Titel des Threads: Official Linux distribution for PureBasic, wo man nochmals nachlesen kann, was sich dort tut.
      Gruß Thomas

      "Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
      ComputerInfo für PPF
    • ok - demnach, was ich dort gelesen habe, setzt PB 5.72 Ubuntu 18.04 voraus (entspricht Mint 19.x)
      Dann ist das ja geklärt und wird auch kein Problem darstellen..


      OT:
      Fühle mich trotzdem mit Mint 18.3 total wohl. Ist ein feines, stabiles, schnelles & sicheres System für meine Hardware - natürlich immer aus meiner Sicht bzw. Benutzungs-/Anwendungsverhaltens.
      Und - reichlich Raum zum freien Experimentieren & Ausprobieren.

      Interessant ist auch, das Mint 20.x erstmalig mit Ubuntu 20.04 gleichgezogen hat. Ubuntu 19.x wurde einfach übersprungen..
      Gruß Jörg

      Ideen gibt es viele - man muß sie nur haben...
      Win7-Pro / Linux Mint
    • JörgG schrieb:



      ******************************************
      PureBasic 5.72 (Linux - x64)
      ******************************************

      Loading external modules...
      Error: Can't load OS libraries, please re-install PureBasic.
      +++ exited with 1 +++

      Hm, geht denn der normale Aufruf vom pbcompiler in der Kommandozeile? Also einfach nur "./pbcompiler /home/jogo/pureprojekte/0_testkram/bild_bauen_speichern.pb"?

      Wobei es vermutlich insgesamt wirklich ratsam ist, einfach auf ein neueres Linux Mint upzugraden.