Library-Problem

Direkte Linux-Programmierung, POSIX
Antworten
AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Library-Problem

Beitrag von AnGaiNoR » Mo Okt 19, 2009 8:22 pm

Hallo :)

Ich habe mal wieder ein Problem mit Linux :(
Ich habe ein Projekt, in dem ich die Bullet Physics Library verwenden möchte, also habe ich mir die neuste Version heruntergeladen und installiert (per make).
Das Kompilieren ist kein Problem, aber sobald ich das Programm starte meckert der PC, dass er die betreffende Bibliothek nicht laden kann!

Komischerweise hatte ich genau dieses Problem mit einer anderen Bibliothek zuvor auch schon; und das komischste ist, dass diese Bibliothek seit der Installation der Bullet Library funktioniert!

Ich bin mir sicher, dass das Problem einfach zu lösen ist, ich komm aber nicht drauf.

Danke im Vorraus ;)
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Library-Problem

Beitrag von Dirty Oerti » Mo Okt 19, 2009 8:24 pm

Hm, das lässt mich vermuten, dass er deine neu installierten Bibliotheken nicht findet.
Vielleicht hilft es, den Libary Path zu aktualisieren?
Wohin sind die Bibliotheken denn installiert?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Library-Problem

Beitrag von AnGaiNoR » Mo Okt 19, 2009 8:32 pm

In /usr/local/lib.
Das komische ist eben, dass anscheinend immer die zuletzt installierte Library nicht zu finden ist.
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Library-Problem

Beitrag von Xin » Di Okt 20, 2009 5:33 pm

Vielleicht wären ein paar mehr Informationn hilfreich!?
Wie rufst Du den Compiler auf, z.B. ^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Library-Problem

Beitrag von AnGaiNoR » Di Okt 20, 2009 8:09 pm

So, Problem halbweg gelöst ^^
Es lag wirklich am Library-Path!

Jetzt bleiben nur noch 2 Teilprobleme bis zur Lösung:

Wie bekomme ich es hin, dass die Umgebungsvariable dauerhaft gesetzt wird? Ich muss die sicherlich irgendwo reinschreiben, aber wo? (Also /etc/environment ist es nicht :) )

Im Verzeichnis /usr/local/lib befinden sich 5 Dateien je Library: libbulletcollision... .a, .so, .la, .so.0, .so.0.0.0. Da ich nicht davon ausgehe, dass der User die Bibliothek installiert hat kopiere ich sie per cp -H /usr/local/lib/libbulletcollision.so ProjektPfad/bin ins Verzeichnis des Programms. Allerdings linkt der Linker beim linken (sehr schön!) per -lbulletcollision nicht die gewünschte libbulletcollision.so, sondern libbulletcollision.so.0! Beide Dateien sind letztlich aber nur Links auf libbulletcollision.so.0.0.0. Wie bekomme ich es nun hin, dass er die libbulletcollision.so linkt und nicht die mit der zusätzlichen .0?

PS: Ich benutze Code::Blocks mit GCC.
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Library-Problem

Beitrag von Xin » Di Okt 20, 2009 8:23 pm

AnGaiNoR hat geschrieben:Wie bekomme ich es hin, dass die Umgebungsvariable dauerhaft gesetzt wird? Ich muss die sicherlich irgendwo reinschreiben, aber wo? (Also /etc/environment ist es nicht :) )
Schau Dir mal profile an.
AnGaiNoR hat geschrieben: Im Verzeichnis /usr/local/lib befinden sich 5 Dateien je Library: libbulletcollision... .a, .so, .la, .so.0, .so.0.0.0. Da ich nicht davon ausgehe, dass der User die Bibliothek installiert hat kopiere ich sie per cp -H /usr/local/lib/libbulletcollision.so ProjektPfad/bin ins Verzeichnis des Programms. Allerdings linkt der Linker beim linken (sehr schön!) per -lbulletcollision nicht die gewünschte libbulletcollision.so, sondern libbulletcollision.so.0! Beide Dateien sind letztlich aber nur Links auf libbulletcollision.so.0.0.0. Wie bekomme ich es nun hin, dass er die libbulletcollision.so linkt und nicht die mit der zusätzlichen .0?
Wenn es nur Links sind, dann komm es doch am Schluss wieder auf die richtige Datei raus, oder wie verstehe ich das!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Library-Problem

Beitrag von AnGaiNoR » Di Okt 20, 2009 8:28 pm

Soll ich bei profile einfach export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:. reinschreiben?

Eigentlich sollten die Links auf die gleiche Datei hinauslaufen, aber das Problem ist hauptsächlich folgendes: Wenn ich den Library-Path nur auf . setze (also die Libraries in /usr/local/lib ignoriere, schließlich hab ich die eine ja im Programmordner), dann meckert das Programm, dass libbulletcollision.so.0 nicht gefunden wird.

EDIT:
Anscheinend soll ich im Ordner /etc/profile.d einfach eine Datei lib.sh anlegen und da das export reinkritzeln, oder?

EDIT2:
Wenn es für das Problem mit der falsch gelinkten Library keine Lösung gibt, dann werd ich die einfach löschen :P
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Library-Problem

Beitrag von Kerli » Di Okt 20, 2009 9:49 pm

AnGaiNoR hat geschrieben:Eigentlich sollten die Links auf die gleiche Datei hinauslaufen, aber das Problem ist hauptsächlich folgendes: Wenn ich den Library-Path nur auf . setze (also die Libraries in /usr/local/lib ignoriere, schließlich hab ich die eine ja im Programmordner), dann meckert das Programm, dass libbulletcollision.so.0 nicht gefunden wird.
Das liegt wohl daran das libbulletcollision.so wahrscheinlich einfach nur auf libbulletcollision.so.0 verlinkt. Dh. also nur mit einem relativen Pfad linkt und keinem absoluten. Da müsstest du entweder den richtigen Pfad angeben, oder einfach die libbulletcollision.so.0 bzw. eigentlich ist es glaub ich die libbulletcollision.so.0.0.0 in den Ordner kopieren und einfach die Nullen weglassen. Soweit ich weiß ist das mit den Nullen und den Verlinkungen nur, damit man leicht verschiedenen Versionen der selben Bibliothek haben kann bzw. updaten kann ohne davon abhängige Programme zu stören.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Library-Problem

Beitrag von AnGaiNoR » Mi Okt 21, 2009 5:05 pm

Kerli hat geschrieben:Das liegt wohl daran das libbulletcollision.so wahrscheinlich einfach nur auf libbulletcollision.so.0 verlinkt.
Nein, die libbulletcollsion.so verlinkt auf libbulletcollision.so.0.0.0, genauso wie die libbulletcollision.0.

Mit dem Setzen der Umgebungsvariable bin ich immer noch nicht weiter :(
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Library-Problem

Beitrag von Jside » Sa Okt 24, 2009 1:37 am

Als root folgendes ausführen:
ldconfig
das baut die Cache der dynamischen Library runtime(s) wieder neu auf.

Das wird meistens in den make/cmake/scons files vergessen. Solltest du immer, wenn du eine selbstkompilierte Library installiert hast ausführen.

Antworten