Hi,
angenommen ich habe den Quellcode einer Software und diese meldet beim Linken fehlende Funktionen. Wie finde ich am ehesten raus, welche Libs dazu gelinkt werden müssen?
Bislang gehe ich ueber den Weg include -> package -> lib, also per 'grep xyz -r /usr/include' suche ich in den includes, dann ermittle ich das package der include-Datei per 'dpkg -S /usr/include/...', und dann versuche ich in die im package enthaltenen Libs versuchsweise zu linken.
Aber da ist zu viel Raterei dabei.
Gibt es einen einfacheren Weg, sich die Libs anzeigen zu lassen, die eine bestimmte Funktion enthalten?
Gruß
Suche nach Bibliotheksfunktionen
-
- Beiträge: 3799
- Registriert: 26.02.2009 14:35:56
Re: Suche nach Bibliotheksfunktionen
man 3 funktionsname - und wenn die -dev-pakete installiert sind, sollte man die Manpage zur Funktion bekommen - und damit auch die zu includierende Header-Datei. Mit der kann man dann auf Paketsuche nach Datei gehen und schon hat man die Lib. Gibt ja bei Debian.org die Suche nach Paketinhalt bez. bei instaliertem -dev reicht auch ein dpkg -S deine.h.
Re: Suche nach Bibliotheksfunktionen
Ich erinnere mich, das ldd die gelinkten Bibliotheken anzeigt.
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.
- weedy
- Beiträge: 585
- Registriert: 02.11.2002 21:47:49
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Suche nach Bibliotheksfunktionen
Ganz genau, doch dazu ist es notwendig, dass der Compiler auch den Linkvorgang ohne Probleme hingekriegt hat. Wenn ich jedoch Symbole sehe, die ld (vom compiler aufgerufen) nicht finden kann, dann interessiert mich, in welchen Libs die Symbole ggf. zu finden sind.ralli hat geschrieben:Ich erinnere mich, das ldd die gelinkten Bibliotheken anzeigt.
In diesem Fall nützt mir ldd recht wenig, wenn der Compiler nicht in der Lage war, ein executable zu generieren.
Gruß
Re: Suche nach Bibliotheksfunktionen
Richtig, es gibt den befehl nm, den man z.B. nm /usr/lib64/libc.a aufrufen kann, um sich die Symbole von /usr/lib64/libc.a ausgeben zu lassen.weedy hat geschrieben:In diesem Fall nützt mir ldd recht wenig, wenn der Compiler nicht in der Lage war, ein executable zu generieren.
1. die Ausgabe ist etrem "laut"
2. um herauszufinden, welche Bibliothek, welches Symbol beinhaltet, mußt du das für jede infrage kommende Bibliothek machen, was noch mehr "Lautstärke" produziert.
3. am einfachsten ist <Funktionsname> unresolved bei google einzugeben.
- weedy
- Beiträge: 585
- Registriert: 02.11.2002 21:47:49
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Suche nach Bibliotheksfunktionen
Aber das ist eben nicht wirklich gut. Ich meine, es gibt ja Tools, wie z.b. locate. Vieleicht braucht man mal eine Art Desktopsuche, die auf Spezialattribute getuned ist. Ich hatte mal vor langer Zeit mit swish-e herumgedoktert, aber das ist Ding echt gefaehrlich und nicht ganz einfach zu warten.MSfree hat geschrieben:Richtig, es gibt den befehl nm, den man z.B. nm /usr/lib64/libc.a aufrufen kann, um sich die Symbole von /usr/lib64/libc.a ausgeben zu lassen.weedy hat geschrieben:In diesem Fall nützt mir ldd recht wenig, wenn der Compiler nicht in der Lage war, ein executable zu generieren.
1. die Ausgabe ist etrem "laut"
2. um herauszufinden, welche Bibliothek, welches Symbol beinhaltet, mußt du das für jede infrage kommende Bibliothek machen, was noch mehr "Lautstärke" produziert.
3. am einfachsten ist <Funktionsname> unresolved bei google einzugeben.
Vieleicht finde ich ja noch eine ähnliche Suchlösung, die ich bequem für lib-Symbole aufpopeln kann. Es muss ja nichteinmal eine DB sein, in Files kann man ja auch schnell suchen mit den heutigen Kisten. Aber eine DB ist schon was tolles. Semantisch und so.
Gruß