Shared Object debuggen

Antworten
Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Shared Object debuggen

Beitrag von Socke »

Hallo,
wie debuggt ihr eure Bibliotheken unter Linux? mein kleines Testprogramm liefert beim starten:

Code: Alles auswählen

./project1: error while loading shared libaries: libimgupl.so: cannot open shared object file: No such file or directory
Verzeichnisstruktur sieht so aus:

Code: Alles auswählen

~/projects/imgupl/library/libimgupl.so
~/projects/imgupl/test/project1
Mir ist so schon klar, dass mein Linux die Bibliothek nicht finden kann, da sie gar nichts davon weiß. Für jedes Projekt ldconfig zu starten und/oder den Pfad in /etc/ld.so.conf.d/ einzutragen erscheint mir ein wenig übertrieben. Gibt es da einfachere Möglichkeiten?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Shared Object debuggen

Beitrag von mse »

Benutze die Umgebungsvariablen LD_LIBRARY_PATH oder LD_PRELOAD. Näheres unter "man ld.so".

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Shared Object debuggen

Beitrag von Socke »

mse hat geschrieben:Benutze die Umgebungsvariablen LD_LIBRARY_PATH oder LD_PRELOAD. Näheres unter "man ld.so".
In der Shell funktioniert das ganz gut. Da die Pfade aber nur während der Entwicklung benötigt werden, würde ich diese nur sehr ungern global (.bashrc) definieren. Die Lazarus-Lösung unter Start -> Startparameter -> Reiter "Umgebungsvariablen" funktioniert nicht (wenn dies denn hätte funktionieren sollen). Wenn die die Variable vor dem Start von Lazarus definiere und damit dann das Programm debuggen will, wird die Bibliothek ebenfalls nicht gefunden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10994
Registriert: Mo 11. Sep 2006, 19:01

Re: Shared Object debuggen

Beitrag von theo »

Die Lib dynamisch laden. Dann kann man den genauen Pfad inkl. Dateiname angeben.
h2pas Option: -P

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Shared Object debuggen

Beitrag von mse »

Socke hat geschrieben:Wenn die die Variable vor dem Start von Lazarus definiere und damit dann das Programm debuggen will, wird die Bibliothek ebenfalls nicht gefunden.
In MSEide sollte es funktionieren. 'Target'-'Environment'-'Environment variables'. Die Werte werden mittels "-gdb-set environment" an gdb übergeben. Vielleicht kannst du ein entsprechendes gdb Start-Script in Lazarus definieren?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Shared Object debuggen

Beitrag von Socke »

theo hat geschrieben:Die Lib dynamisch laden. Dann kann man den genauen Pfad inkl. Dateiname angeben.
h2pas Option: -P
h2pas bringt mir nicht viel, wenn ich die Bibliothek selbst schreibe :D, das mit dem dynamisch laden wär aber wohl eine Möglichkeit.
mse hat geschrieben:In MSEide sollte es funktionieren. 'Target'-'Environment'-'Environment variables'. Die Werte werden mittels "-gdb-set environment" an gdb übergeben. Vielleicht kannst du ein entsprechendes gdb Start-Script in Lazarus definieren?
Ich bin froh, wenn der Debugger funktioniert :oops: Also ist das wohl eher eine Möglichkeit, wenn ich mal viel Zeit habe und willens bin, den Debugger auseinander zu nehmen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10994
Registriert: Mo 11. Sep 2006, 19:01

Re: Shared Object debuggen

Beitrag von theo »

Socke hat geschrieben: h2pas bringt mir nicht viel, wenn ich die Bibliothek selbst schreibe :D, das mit dem dynamisch laden wär aber wohl eine Möglichkeit.
Schon klar. ich meinte mit h2pas -P kannst du dir anzeigen lassen wie das geht.
Ein test.h mit z.B.

Code: Alles auswählen

int template(int a);
reicht als input damit h2pas den ganzen Krempel generiert.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Shared Object debuggen

Beitrag von Socke »

Dynamisch laden funktioniert wunderbar und animiert dazu nicht alles unnötige zu exportieren :D
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten