Forum: PC-Programmierung libsigrok - Dummy-Funktionen bei fehlender externer Library


von Joerg W. (joergwolfram)


Lesenswert?

ich habe für mein PicoScope 2208B einen Treiber für libsigrok erstellt, 
der inzwischen auch einigermaßen läuft (nur digitale Kanäle).
Eigentlich würde ich den Code gerne dem Projekt zur Verfügung stellen, 
wenn da nicht das Problem mit der proprietären Bibliothek von Picotech 
wäre.
Ohne die lässt sich z.B. auch Pulseview nicht starten, auch wenn gar 
kein PicoScope angeschlossen ist:

pulseview: error while loading shared libraries: libps2000a.so.2: cannot 
open shared object file: No such file or directory

Ist ja auch logisch, da Funktionen aus dieser Bibliothek genutzt werden. 
Der Fehler kommt von meiner compilierten libsigrok, die ihrerseits 
Funktionen aus der libps2000a aufruft. Ich könnte jetzt zwar eine eigene 
libps2000a.so mit Dummy-Funktionen erstellen, aber das ist meiner 
Meinung nach keine "saubere" Lösung.

Gibt es eine Möglichkeit, dass beim Fehlen dieser Bibliothek z.B. 
Dummy-Funktionen (ähnlich wie "weak") aufgerufen werden oder wir mir der 
Loader (ld.so) da immer einen Strich durch die Rechnung machen?

Jörg

von Εrnst B. (ernst)


Lesenswert?

Lass die Bibliothek nicht beim Start direkt vom ld.so laden, sondern 
mach das von Hand in deinem Code (dlopen & co). Dann kriegst du einen 
Fehler wenn nicht verfügbar, den kannst du abfangen.

von Joerg W. (joergwolfram)


Lesenswert?

Danke, das muss ich mir mal ansehen. Funktioniert das auch IN dynamisch 
geladenen Bibliotheken, die Funktionen aus weiteren Bibliotheken 
aufrufen? Oder geschieht das durch das Programm, welches die Bibliothek 
lädt?

Wahrscheinlich ist es auch sinnvoll, mit den Entwicklern Kontakt 
aufzunehmen, letztendlich sollte es ja auf allen unterstützten 
Plattformen funktionieren und das kann ich sowieso nicht allein 
bewerkstelligen.

Jörg

: Bearbeitet durch User
von Ein Kommentar (Gast)


Lesenswert?

Unter Linux musst du nur drauf achten, dass ldd keine fehlenden 
Libraries meldet.

Also entweder (dlopen & co) oder $LD_LIBRARY_PATH setzen, damit es eine 
von dir erstelle Dummylibrary findet, falls keine echte Library 
vorhanden.

Was die über dlopen geladenen Libraries brauchen, bemängelt ldd nicht. 
Die Fehlermeldung bekommst du erst vom dlopen.

Diese beiden Strategien sollten unter jedem Betriebssystem 
funktionieren. Ich finde dlopen einfacher zu portieren. Man hat zwar 
einmal den Aufwand in der Programmierung, muss aber nachher nicht für 
jedes BS andersartige Scripte bauen.

von Joerg W. (joergwolfram)


Lesenswert?

Vielen Dank, ich habe es jetzt mit dlopen umgesetzt und es funktioniert 
prima. Als Nächstes muss ich mir wohl Pulseview vornehmen, allerdings 
ist das QT und davon hab ich relativ wenig Ahnung. Aber es fehlen mir 
halt einfach ein paar Dinge oder funktionieren nicht so, wie erwartet. 
Die Entwickler kann man scheinbar nur über IRC erreichen, aber da wird 
sich auch eine Lösung finden.

Jörg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.