Re: Wie die Lib zu undefinierten Symbolen finden?

Philipp Thomas <[email protected]> Wed, 11 Jan 2012 21:11:26 +0100
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
On Tue, 10 Jan 2012 12:51:10 +0100, Thomas Michalka=20

>Warum ist dann die Lib, in der das Symbol definiert ist, nicht unter den
>NEEDED-Eintr=C3=A4ge des Programms aufgelistet?

Mir fallen zwei m=C3=B6gliche Gr=C3=BCnde ein. Zum einen k=C3=B6nnte es =
sich um eine
indirekte Abh=C3=A4ngigkeit handeln, sprich eine der in NEEDED
verzeichneten Bibliotheken ben=C3=B6tigt das Symbol (unwahrscheinlich in
diesem Fall) oder aber die Bibliothek wird explizit mittels dlopen
geladen und dann die ben=C3=B6tigten Symbole mittels dlsym eingebunden.
Sicheren Aufschluss k=C3=B6nnen nur die Quellen des Pakets liefern.

>Richtig. Hier habe ich aber auch keinen Hinweis auf die
>libborqt-6.9-qt2.3.so; wieso nicht, wenn das undefinierte Symbol darin
>definiert ist?

Im Binary werden die Informationen unabh=C3=A4ngig von einander
gespeichert. Da ist zum einen der Name der Bibliothek gegen die das
Programm gelinkt wird und zum anderen das ben=C3=B6tigte Symbol. Es wird
beim Linken nicht festgehalten, aus welcher Bibliothek welches Symbol
benutzt wurde.

>=C3=BCbrigens ist das neben einem Symlink die einzige Datei in dem =
RPM-Paket
>gewesen, das ich installiert habe. Ich h=C3=A4tte sie wohl auch aus =
einem
>*.tar.gz holen und manuell nach /usr/lib kopieren k=C3=B6nnen. Ich =
wollte
>u.a. sehen, ob initPAnsiStrings darin enthalten ist.

Wenn die Bibliothek nicht f=C3=BCr die Distribution gebaut wurde sollte =
man
das nicht probieren sondern die Bibliothek f=C3=BCr die eigene =
Distribution
kompilieren.

Deshalb gib doch bitte an, um welches Programm es sich handelt und
eine URL zum Quellcode des Programms. Dann kann ich mir den Code
selber mal ansehen und evtl. entdecken, was da schief geht. Die URL zu
dem Quellpaket von libborqt-6.9-qt2.3.so w=C3=A4re auch nicht schlecht.

Philipp

>Zus=C3=A4tzlich frage ich, ob es gen=C3=BCgt, die Lib an die richtige =
Stelle zu
>kopieren, damit der Dynamic Linker/Loader (/lib/ld-linux.so.2) diese Lib
>beim Programmstart laden kann. Kannst Du dazu was sagen?

Wo der dynamische Linker ld-linux.so die Bibliotheken sucht ist in
/etc/ld.so.conf festgehalten. Wenn die Bibliothek in einem der
angegebenen Veryeichnisse liegt wird sie bei Bedarf geladen.

Philipp
-- 
To unsubscribe, e-mail: [email protected]
To contact the owner, e-mail: [email protected]