PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Herausfinden welche Funktion in welcher Lib ist



Benngun
16-03-2004, 10:17
hi,

ich hab unter AIX Probleme mit dem Binden von Programmen. Ich erhalte Fehlermeldungen das Symbole nicht aufgelöst werden können. Ich hab eine Grobe vermutung in welchen Libs die funktionen enthalten sein könnten. Nur fehlt es an den Mitteln (oder vieleicht wissen) in die Libs "hineinzukucken" mit ar erhalte ich nur die info aus was für .o Dateien die Lib gebaut wurde. Und strings ist auch nicht wirklich hilfreich, da auch Aufrufe als treffer ausgegeben werden.

kennt jemand Tools für das Problem, bzw eine Möglichkeit an das Problem heranzugehen?

thx

wraith
16-03-2004, 11:15
How to Match a Symbol with its Library
If you're trying to link a program and get this kind of error:
ld: Undefined symbol
_xdr_reference
*** Error code 2
make: Fatal error: Command failed for target 'prog'
Here's how you can locate the libraries with which you need to link. The basic plan
is to use nm to look through the symbols in every library in /usr/lib, grepping for the
symbols you're missing. The linker looks in /usr/ccs/lib and /usr/lib by default, and
so should you. If this doesn't get results, extend your search to all other library
directories (such as /usr/openwin/lib), too.
% cd /usr/lib
% foreach i (lib?*)
? echo $i
? nm $i | grep xdr_reference | grep -v UNDEF
? end
libc.so
libnsl.so
[2491] | 217028| 196|FUNC |GLOB |0 |8
|xdr_reference
libposix4.so
...
This runs "nm" on each library in the directory, to list the symbols known in the
library. Pipe it through grep to limit it to the symbol you are searching for, and filter
out symbols marked as "UNDEF" (referenced, but not defined in this library). The
result shows you that xdr_reference is in libnsl. You need to add -lnsl on
the end of the compiler command line.

SeeksTheMoon
21-03-2004, 10:53
wenn er sagt welche Symbole das sind und Du unter aix das nm-Kommando hast, dann kannst Du der Lib auf die Pelle rücken; vorausgesetzt die Binaries sind nicht stripped.

Deever
21-03-2004, 16:03
Sorry, wenn ich so reinplatze, aber:

deever@floatkiller:~ $ nm /usr/lib/apache2/mod_mime.so
nm: /usr/lib/apache2/mod_mime.so: no symbols
deever@floatkiller:~ $ ???
Hmm?
Wie kann denn der Indianer die Module überhaupt laden, so ohne Symbole? Nackt mit gehäuteter Katze 7x um eine vom Blitz zerstörte Eiche herumtanzen oder was? :D

Gruß (& SCNR),
dev

kth
21-03-2004, 17:55
@ Deever

Du musst nm noch die Option -D übergeben:

-D
--dynamic
Display the dynamic symbols rather than the normal symbols. This
is only meaningful for dynamic objects, such as certain types of
shared libraries.