[Announce] libSkindesignerAPI

  • Moin,


    ich habe mir gedacht, damit es über Ostern nicht langweilig wird, lagere ich mal die Skindesigner API in eine eigene Lib aus, damit dieses hässliche kopieren von Verzeichnissen in andere Plugins entfällt. Der Code basiert auf der Vorlage von Lars, nochmals vielen Dank dafür!


    Zur Installation bitte wie folgt vorgehen:


    - Skindesigner Version 0.4.0 aus dem Git holen
    - README lesen
    - libskindesignerapi bauen und installieren
    - skindesigner clean bauen und installieren
    - tvguideng Version 0.1.0 aus dem Git clean bauen und installieren
    - weatherforecast Version 0.1.0 aus dem Git clean bauen und installieren


    Fertig :D Der kundige Codeleser wird feststellen, dass das Verzeichnis "libskindesigner" aus tvguideng und weatherforecast komplett verschwunden ist ;)


    Ich hoffe, das ganze funktioniert bei euch...der Code für die API liegt nun in einer shared library vor, somit bin ich in der Lage, im Skindesigner zu prüfen, mit welchem Versionsstand der Lib ein Plugin, dass sich am Skindesigner registriert, gebaut worden ist und ob dieser Versionsstand kompatibel zu der Version ist, gegen die der Skindesigner gebaut wurde. Grundsätzlich sollten Skindesigner und die Plugins immer die Lib in der selben Major Version benutzen, ansonsten gibt es Probleme. Da aktuell die lib nur in der Version 0.0.1 vorliegt, habe ich im Skindesigner noch keine Prüfung für verschiedene Versionsstände eingebaut. Im Debug Log wird jedoch ausgegeben, welche API Version der Skindesigner benutzt und mit welcher API Version sich die anderen Plugins am Skindesigner registrieren.


    Jo...bitte mal fleissig testen, ob das alles so funktioniert wie es soll...


    Ciao Louis

  • Hi Louis
    Auf meinem 64 bit System baut die api nicht

    Code
    1. g++ -c -DAPIVERSION=0 -DLIBVERSION=\"0.0.1\" -o osdelements.o osdelements.c
    2. g++ -c -DAPIVERSION=0 -DLIBVERSION=\"0.0.1\" -o skindesignerapi.o skindesignerapi.c
    3. g++ -c -DAPIVERSION=0 -DLIBVERSION=\"0.0.1\" -o skindesignerosdbase.o skindesignerosdbase.c
    4. g++ -shared -Wl,-soname,libskindesignerapi.so.0 -o libskindesignerapi.so.0.0.1 osdelements.o skindesignerapi.o skindesignerosdbase.o
    5. /usr/bin/ld: osdelements.o: relocation R_X86_64_32S against `_ZTVN15skindesignerapi11cOsdElementE' can not be used when making a shared object; recompile with -fPIC
    6. osdelements.o: could not read symbols: Bad value
    7. collect2: error: ld returned 1 exit status
    8. make: *** [libskindesignerapi.so.0.0.1] Error 1

    Gruß Patrick


    [size=8]* Meine NeverEndingProjects ;-) *


    vectra --- glasslike ---

  • Hm, auf meinem schon.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Auf dem RasPi baut es.
    Wenn ich ein "-fPIC" in CXXFLAGS im Makefile einbaue dann baut es auch auf dem 64 bit System

    Gruß Patrick


    [size=8]* Meine NeverEndingProjects ;-) *


    vectra --- glasslike ---

  • Das dürfte mit 64Bit eigentlich nichts zu tun haben, -fPIC braucht man immer.
    Wie sieht denn deine vdr.pc aus? Da müsste es eine Variable cxxflags geben, wo alles nötige drin ist.


    Lars

  • Hi Lars.
    Danke für den Tip mit vdr.pc
    Es lag daran das die von libskindesignerapi im Pfad /usr/local/include/... gesucht wurde. Befand sich aber in /usr/include/...


    War wohl ein früherer Fehler der da wieder hoch kam.


    Hab es behoben und jetzt baut es

    Gruß Patrick


    [size=8]* Meine NeverEndingProjects ;-) *


    vectra --- glasslike ---

  • Die Make.config gibt es nicht unbedingt. Und evtl. möchte man diese lib janauch woanders als den vdr installieren.
    Aber da muss louis was zu sagen.


    Lars

  • Moin,


    bezüglich des Makefiles bin ich leidenschaftslos...ich finde es irgendwo auch passender, die Sachen nach local abzulegen. Passt nicht so ganz zu gen2vdr, aber das ist aus meiner Sicht eh noch nicht optimal auf das neue Makefile System des VDR umgestellt, da hatte Helmut wohl noch keinen Bock drauf. Ich habe in meine .bashrc einfach ein "export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH" eingebaut, dann werden pc Dateien auch da gesucht, wo sie sinnvollerweise abgelegt werden sollten.


    Ciao Louis

  • Moin,
    habe alles ordnungsgmäß übersetzt (skinndesigner, tvguideng, weatherforecast, api).
    Die neue LIB wird beim Übersetzten der Plugns gefunden.


    Wenn ich Weatherforecast starte kommt dies:


    Code
    1. vdr[655]: segfault at fffffffffffffff8 ip 00007f6c96a63227 sp 00007fff59267968 error 7 in libstdc++.so.6.0.17[7f6c969a9000+e3000]


    Was kann das sein ?


    Gruß
    moz

  • Was kann das sein ?


    So allerhand :D Sicher das alles korrekt gebaut ist? Falls ja wäre ein backtrace hilfreich...


    Ciao Louis

  • [...] Ich habe in meine .bashrc einfach ein "export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH" eingebaut, dann werden pc Dateien auch da gesucht, wo sie sinnvollerweise abgelegt werden sollten. ...


    Bei mir funktioniert das nicht. :(


    Code
    1. vdr01_64 ~ # grep PKG_CONFIG_PATH .bashrc
    2. export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH
    3. vdr01_64 ~ #


    Code
    1. vdr01_64 ~ # echo $PKG_CONFIG_PATH
    2. vdr01_64 ~ #