Seite 1 von 1

Library-Problem

Verfasst: Mo Okt 19, 2009 8:22 pm
von AnGaiNoR
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 ;)

Re: Library-Problem

Verfasst: Mo Okt 19, 2009 8:24 pm
von Dirty Oerti
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?

Re: Library-Problem

Verfasst: Mo Okt 19, 2009 8:32 pm
von AnGaiNoR
In /usr/local/lib.
Das komische ist eben, dass anscheinend immer die zuletzt installierte Library nicht zu finden ist.

Re: Library-Problem

Verfasst: Di Okt 20, 2009 5:33 pm
von Xin
Vielleicht wären ein paar mehr Informationn hilfreich!?
Wie rufst Du den Compiler auf, z.B. ^

Re: Library-Problem

Verfasst: Di Okt 20, 2009 8:09 pm
von AnGaiNoR
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.

Re: Library-Problem

Verfasst: Di Okt 20, 2009 8:23 pm
von Xin
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!?

Re: Library-Problem

Verfasst: Di Okt 20, 2009 8:28 pm
von AnGaiNoR
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

Re: Library-Problem

Verfasst: Di Okt 20, 2009 9:49 pm
von Kerli
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.

Re: Library-Problem

Verfasst: Mi Okt 21, 2009 5:05 pm
von AnGaiNoR
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 :(

Re: Library-Problem

Verfasst: Sa Okt 24, 2009 1:37 am
von Jside
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.