Wie vom System verwendeten Lib-Dateinamen ansprechen?

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
EUP
Foriker
Beiträge: 67
Registriert: So 4. Aug 2013, 09:11
Kontaktdaten:

Wie vom System verwendeten Lib-Dateinamen ansprechen?

Beitrag von EUP » Do 16. Nov 2017, 13:56

Hallo,

in einer von mir erstellten Anwendung greife ich auf eine externe Lib zu, Einbindung via:

Private Extern LZRTFDecompress(Raus As Pointer, RausLang As Pointer, Rein As Pointer, ReinLang As Integer) As Integer In "librtfcomp"

Die Lib wird mit dem Paket "librtfcomp0" installiert.

Klappt auch soweit prima, keine weiteren Probleme, Programm fertig und Installationspaket (mit Abhängigkeitsverweis auf librtfcomp0) erstellt.

Nun habe ich mein System neu aufgesetzt (Alt = Mint 18.2 KDE Neu = KDE Neon), Installationspaket neu installiert, die Lib wird auch mitinstalliert, das Programm bemeckert aber, dass es die Lib nicht finden kann.

Installiert wird librtfcomp.so.0.0.0 (von 2014 - neuere Version schließe ich mal aus) und ein Link auf librtfcomp.so.0, das Programm läuft, wenn ich eine weitere Verlinkung auf librtfcomp.so von Hand erstelle, diese Notwendigkeit ist nicht sehr nutzerfreundlich und auch nicht zukunftssicher (wer weiß schon welcher Name demnächst verwendet wird).

Ich nehme an, unter Mint wurde librtfcomp.so installiert und unter Neon librtfcomp.so.0.0.0, habe ich da eine Möglichkeit im Programm drauf zu reagieren - andere Ideen?

Der Fehler tritt nicht bei der Einbindung, sondern erst beim Aufruf auf.

Dank an alle Wissenden.

Benutzeravatar
gambi
Moderator
Beiträge: 319
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Wie vom System verwendeten Lib-Dateinamen ansprechen?

Beitrag von gambi » Do 16. Nov 2017, 22:23

Hallo EUP,
lies dich mal durch http://gambaswiki.org/wiki/howto/extern.
Da steht u.a. :
We must also specify which library to use: this is done by the clause "IN libraryXXX". Alternatively, you can use a separate LIBRARY statement: all the subsequent extern declarations will refer to this statement. Either "IN library" or "LIBRARY xxx" can specify a version number after a colon, and this is recommended.
Es wird also empfohlen, die Versionsnummer mit zugeben.
Hoffe, das hilft.

gg

EUP
Foriker
Beiträge: 67
Registriert: So 4. Aug 2013, 09:11
Kontaktdaten:

Re: Wie vom System verwendeten Lib-Dateinamen ansprechen?

Beitrag von EUP » Fr 17. Nov 2017, 11:38

Hallo,

danke für den Tipp, werde ich das nächste Mal beherzigen/probieren.

In diesem Fall habe ich allerdings gestern Abend noch etwas experimentiert und das Problem mit (hoffe ich zumindest) Trick17 gelöst.

- Lib herauskopiert & umbenannt
- Extern Deklaration auf neuen Namen angepasst
- Umbenannte Lib ins Installationspaket eingefügt (Installationsort /usr/lib)

Klappte sofort

SommerWin
Foriker
Beiträge: 42
Registriert: Do 26. Jan 2017, 20:02
Kontaktdaten:

Re: Wie vom System verwendeten Lib-Dateinamen ansprechen?

Beitrag von SommerWin » So 19. Nov 2017, 10:07

Guten Morgen,
ich würd's so machen: shell find /usr/lib/LibName > to Variable
Dann steht in der Variable auch gleich der komplette Pfad...
Zudem lässt sich leicht darauf reagieren, wenn eine bestimmte Versionsnummer Voraussetzung ist.
schöne Grüsse
Kurt

EUP
Foriker
Beiträge: 67
Registriert: So 4. Aug 2013, 09:11
Kontaktdaten:

Re: Wie vom System verwendeten Lib-Dateinamen ansprechen?

Beitrag von EUP » So 19. Nov 2017, 13:02

Hallo,

wenn ich das richtig versteht, zuerst den Lib-Namen (via Find) ermitteln und dann per Variable zuweisen…

Wenn ich das versuche wirft er den Fehler "Der Bibliotheksname muss ein String sein" aus.

Wenn ich da jetzt keinen Denkfehler mache, scheint die Idee (so etwas in der Richtung ging mir auch schon durch den Kopf) nicht zu funktionieren.

Meine erster Einfall war…

Mehrere Deklarationen (der Fehler tritt erst beim Aufruf auf) und dann z.B. via Select Case je nach dem was vorhanden ist, auf den entsprechenden Aufruf zu verzweigen, habe ich dann verworfen, weil man nicht weiß was da, mit welcher Benennung, noch kommen mag (wird also ggf. nicht zukunftssicher sein).

Mit der selbstbenannten Lib müsste ich doch auf der sicheren Seite sein (selbst inkompatible neue Versionen sollten schadlos sein) oder übersehe ich da etwas?

Grüße

SommerWin
Foriker
Beiträge: 42
Registriert: Do 26. Jan 2017, 20:02
Kontaktdaten:

Re: Wie vom System verwendeten Lib-Dateinamen ansprechen?

Beitrag von SommerWin » Sa 25. Nov 2017, 12:19

Hmmm, iss mir aber ein Rätsel warum das bei dir net funktioniert weil die Ausgabe iss doch eindeutig ein String...

sCommand = "find /usr/lib/Libname"
SHELL sCommand TO Stringvariable

Dann steht in der Stringvariable der komplette Pfad mit der gefundenen Lib

IF (gefundene Lib) <> (notwendige Version) THEN reagiere

Siehe auch Beispiel im Gambas Buch 21.2 Instruktionen SHELL und EXEC

Andere Möglich wäre, die funktionierende SystemLib umbenennen und ins installationspaket integrieren, dann nach /usr/lib/ kopieren (erfordert Root Rechte).

Mit umbennen mein ich jetzt einen eindeutigen Namen geben, der sicher nie von einer Version benutzt wird, Beispiel librtfcomp.MeinGambasProgramm

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste