PureBasic UsePNGImageEncoder()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • hab gerade schockiert festgestellt, daß ich zu dämlich bin, einen Quellcode über die Kommandozeile zu compilieren.
    Ich krieg das echt nicht hin - etliche Varianten ausprobiert (mit Pfad, ohne Pfad // mit relativen Zielpfad usw.) - über 1.5 Stunden hab ich jetzt damit rumgefuchtelt...


    Extra einen "normal funktionierenden" Miniquellcode genommen, der 100%ig funktioniert.
    ./pbcompiler -h funktioniert ja noch wunderbar - aber sonst..


    Über die IDE wird der Testcode korrekt kompiliert (1 Sekunde ;-) ) & looft. (also der Code, ohne UsePNGImageEncoder())

    Gruß Jörg


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

  • Arrrgh... ich dachte, das wär mit Ausführen der ~/purebasic/register.sh erledigt.
    Das es aus dieser Ecke kommt hab ich nicht vermutet.


    Ok - Danke für den Hinweis - Kompilieren im Terminal klappt nun. Ein Testprogramm wird korrekt ausgeführt


    Der Testaufruf:
    strace -s 400 -Tfe execve ./pbcompiler /home/jogo/pureprojekte/0_testkram/bild_bauen_speichern.pb


    erzeugt jetzt erwartungsgemäß einen sehr großen Meldetext.
    Hab mal die gesuchte Zeile hier reinkopiert:

    Code
    [pid  3183] execve("/usr/bin/ld", ["/usr/bin/ld", "-plugin", "/usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so", "-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper", "-plugin-opt=-fresolution=/tmp/cc199p53.res", "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_s", "-plugin-opt=-pass-through=-lc", "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_s", "--sysroot=/", "--build-id", "--eh-frame-hdr", "-m", "elf_x86_64", "--hash-style=gnu", "--as-needed", "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", "-z", "relro", "-o", "/home/jogo/purebasic/compilers/purebasic.out", "-s", "/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o", "/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o", "/usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o", "-L/home/jogo/purebasic/purelibraries/linux/libraries", "-L/usr/lib/gcc/x86_64-linux-gnu/5", "-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu", "-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib", "-L/lib/x86_64-linux-gnu", "-L/lib/../lib", "-L/usr/lib/x86_64-linux-gnu", "-L/usr/lib/../lib", "-L/usr/lib/gcc/x86_64-linux-gnu/5/../../..", "--hash-style=both", "purebasic.o", "--wrap=memcpy", "/home/jogo/purebasic/compilers/debugger.a", "ImagePluginPNG.a", "ImagePluginJPEG.a", "2DDrawing.a", "Image.a", "LinkedList.a", "ImagePluginBMP.a", "ImagePlugin.a", "VectorDrawing.a", "String.a", "Memory.a", "/home/jogo/purebasic/compilers/objectmanager.a", "GtkBase.a", "SimpleList.a", "Shared.a", "ImagePluginPNG.a", "ImagePluginJPEG.a", "2DDrawing.a", "Image.a", "LinkedList.a", "ImagePluginBMP.a", "ImagePlugin.a", "VectorDrawing.a", "String.a", "Memory.a", "/home/jogo/purebasic/compilers/objectmanager.a", "GtkBase.a", "SimpleList.a", "Shared.a", "-lpbpng", "-lz", "-lm", "-lpbjpeg", "-lcairo", "-lpthread", "-lgtk-3", "-lgdk-3", "-lpangocairo-1.0", "-lpango-1.0", "-latk-1.0", "-lcairo-gobject", "-lcairo", "-lgdk_pixbuf-2.0", "-lgio-2.0", "-lgobject-2.0", "-lglib-2.0", "-lX11", "-lc", "/home/jogo/purebasic/compilers/systembase.a", "/home/jogo/purebasic/compilers/stringutility.a", "/home/jogo/purebasic/compilers/stringmanager.a", "/home/jogo/purebasic/compilers/systembase.a", "/home/jogo/purebasic/compilers/unicodefunctions.a", "/home/jogo/purebasic/compilers/stringutility.a", "/home/jogo/purebasic/compilers/unicodefunctions.a", "/home/jogo/purebasic/compilers/stringmanager.a", "-ldl", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed", "-lc", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed", "/usr/lib/gcc/x86_64-linux-gnu/5/crtend.o", "/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o"], [/* 64 vars */]) = 0 <0.000488>

    Gruß Jörg


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

  • echt, ist von dir? Cool 8-)
    Dann könntest ja für das nächste Release die beiden Einträge auch dort einbauen oder? Passt ja eigentlich da rein.


    Kommt ja sicherlich seltener vor, das man über das Terminal compiliert. Aber wenn, dann denkt bestimmt keiner mehr daran, die ".bashrc" zu modifizieren. (was ja nicht schlimm ist - aber erstmal drauf kommen) :-)

    Gruß Jörg


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

  • HM, der Linker-Aufruf sieht korrekt aus. Er übergibt das Flag "-lz", welches die libz einbindet. Ich hatte wegen des Fehlers "DSO aus der Kommandozeile fehlt" vermutet, dass diese Flag fehlt.


    Kommt denn mit dem Kommandozeilenaufruf exakt derselbe Fehler wie vorher?

  • langsam verheddere ich mich mit den unterschiedlichen Varianten.
    Hab jetzt 2 Testvarianten mit je 1xTerminal/1x IDE gemacht und die Fehlerausgaben aufbereitet:

    Gruß Jörg


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

  • Also ich könnte mir vorstellen, dass beim Linken irgendwie zwei verschiedene "libz" verwendet werden; eventuell benutzt er zuerst eine libz.a, findet dort aber das "inflateValidate"-Symbol nicht, und zeigt deshalb den Fehler mit der libz.so, in der er das Symbol gefunden hat.


    Um das rauszufinden, müsstest du mal in alle folgenden Ordner gehen:


    Code
    /home/jogo/purebasic/purelibraries/linux/libraries
    /usr/lib/gcc/x86_64-linux-gnu/5
    /usr/lib/x86_64-linux-gnu
    /usr/lib
    /lib/x86_64-linux-gnu
    /lib/


    Und jeweils schauen, ob es dort "libz.a" oder "libz.so" gibt (oder eventuell mit einer Zahl am Ende des Dateinamens).


    Und dann für jede Datei folgenden Befehl ausführen:


    Code
    $ strings DATEINAME | grep inflateValidate | wc -l


    Der Befehl schaut, ob in der Datei die "inflateValidate"-Funktion vorhanden ist. Er sollte also bei allen Dateien eine Zahl größer 0 ausgeben.

  • Danke für den neuen Ansatz.
    Hab deine Anleitung mal auf 2 verschiedene Systeme ausgeführt.
    Mint 18.3 & Mint 19.3
    Bei unterschiedlichen Ausgaben habe ich die entsprechenden Stellen kommentiert..
    QuellcodeQuellcode bearbeiten



    /home/jogo/purebasic/purelibraries/linux/libraries


    -> zlib.a = 2



    /usr/lib/gcc/x86_64-linux-gnu/5


    -> nicht vorhanden



    /usr/lib/x86_64-linux-gnu


    -> libz.a = 0 // mint19: libz.a = 2


    -> libz.so strings: ‚libz.so‛: Keine solche Datei (Meldung nur mint18)


    -> = 0 // mint19: libz.so = 1



    /usr/lib


    -> nicht vorhanden



    /lib/x86_64-linux-gnu


    -> libz.so.1 = 1 (mint19)


    -> libz.so.1.2.11 = 1 (mint19) //auf T61 mit org. libz.so.1.2.8 = 0



    /lib/


    -> nicht vorhanden
    [/list]


    Interessant ist das Verzeichnis /usr/lib/x86_64-linux-gnu[/b]/[/b]
    Bin fast geneigt, die beiden Dateien von Mint19 in ein Mint18 zu kopieren, dann Mint18 neustarten - den Kopf einziehen - schauen, was passiert..
    Was meinst du dazu?
    Wäre dann die 2. Stelle, an der ich in Mint18 neuere libs aus Mint19 unterschiebe.
    /lib/x86_64-linux-gnu/[/b] hat Mint 18.3 (bis jetzt) ja gut verdaut.
    Wenn das keine ewig fortlaufende "Erneuerungskette" wird, könnt ich bis dahin gut mit leben (falls ich damit ein positives Ergebnis erziele).
    Ansonsten hätte ich wohl irgendwann Mint18 Häppchenweise per Hand auf 19.3 aktualisiert :-)

    Gruß Jörg


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

  • Hm, als erstes könntest du mal probieren, wenn du die "zlib.a" im Purebasic Verzeichnis nimmst und kopierst in eine "libz.a". Ich weiß nicht, wieso der Name dort falschrum ist, aber vlt wird sie deswegen vom Linker gar nicht wahrgenommen.


    Falls das nichts bringt, könntest du in der Tat auch noch in "/usr/lib/x86_64-linux-gnu" die .a-Datei vom neueren System kopieren. Die Gefahr von Fehlern ist hier eher gering, da statische Libs (.a-Endung) ja nur beim Kompilieren verwendet werden. Es sollte also nicht zu einem unbenutzbarem System führen.

  • jo! eines vorweg: UsePNGImageEncoder() funktioniert nun :-)


    Dein letzter Lösungsansatz war der richtige Weg. :top:
    Es gibt jetzt sogar 2 Lösungen (wobei ich mir nicht sicher bin, welche nun besser ist):


    1. Lösung:
    habe die libz.a & libz.so aus "/usr/lib/x86_64-linux-gnu" von Mint19 nach Mint18 kopiert
    wobei die libz.so ein Link auf die "/lib/x86_64-linux-gnu/libz.so.1.2.11" ist.


    2. Lösung (deine Vermutung war ein Volltreffer):
    nur die Datei /home/jogo/purebasic/purelibraries/linux/libraries/zlib.a
    umbennen in libz.a


    Aber schon komisch, dass die Datei falschrum ist. Kann mir nicht vorstellen, dass das ein Versehen ist. Wär mit Sicherheit schon aufgeflogen. Aber Warum?
    (OK, ich könnt ja dort mal nachfragen)


    Ich tendiere zu Lösung 2, weil erstens das System nicht manipuliert werden muss und zweitens weniger Arbeit anfällt.


    Hab jetzt ein System mit Lösung 1 zur Probe laufen. (und auch in "/lib/x86_64-linux-gnu/" die neue libz drin)
    Die anderen Systeme fahr ich mit Lösung 2 (+Startscript für die IDE)
    Mal sehen, wer zuerst rumquiekt - falls überhaupt..


    Danke für das geduldige Ausprobieren - ich allein hätte schon das Handtuch geworfen..
    Ist nun endlich gelöst & gleich eine Menge gelernt dabei ;-)



    Gruß Jörg


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

  • Gut zu hören :)


    Ich würde auch Lösung 2 bevorzugen, da es ja wahrscheinlich auch der eigentlichen Intention von Purebasic entspricht, dass diese zlib benutzt wird.


    Warum die Datei falsch benannt ist, weiß ich nicht. Ich könnte mir vorstellen, dass ältere Purebasic-Versionen dem Linker explizit mitgeteilt haben diese "falsch benannte" ZLib zu benutzen und es im neuesten Purebasic vergessen wurde. Kann aber auch irgendeine andere mysteriöse Ursache dahinterstecken...