ubuntuusers.de

"undefined reference" bei xml2 Library

Status: Gelöst | Ubuntu-Version: Ubuntu 11.10 (Oneiric Ocelot)
Antworten |

Th0mmas

Anmeldungsdatum:
21. November 2011

Beiträge: 3

Hallo, ich versuche seit einiger Zeit, ein Programm zu erstellen, das die Bibliothek xml2 nutzt. Das Problem ist, dass beim Linken Referenzen nicht aufgelöst werden:

thomas@compi:/tmp$ cc `xml2-config --cflags --libs` a.c
/tmp/ccWYVN60.o: In function `main':
a.c:(.text+0xa1): undefined reference to `xmlCheckVersion'
a.c:(.text+0xbe): undefined reference to `xmlReadFile'
a.c:(.text+0xff): undefined reference to `xmlDocGetRootElement'
a.c:(.text+0x11b): undefined reference to `xmlFreeDoc'
a.c:(.text+0x120): undefined reference to `xmlCleanupParser'
collect2: ld gab 1 als Ende-Status zurück
thomas@compi:/tmp$ 

um sicherzustellen, dass die richtigen Compiler- / Linkerparameter verwendet werden, nutze ich "xml2-config":

thomas@vcompi:/tmp$ echo `xml2-config --cflags --libs` 
-I/usr/include/libxml2 -lxml2
thomas@compi:/tmp$ 

Die Bibliothek ist installiert:

thomas@compi:/tmp$ sudo apt-get install libxml2 libxml2-dev
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut       
Status-Informationen einlesen... Fertig
libxml2 ist schon die neueste Version.
libxml2-dev ist schon die neueste Version.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
thomas@compi:/tmp$

Ich nutze Ubuntu 11.10 64 Bit.

Für Ideen wo das Problem liegen könnte, wäre ich dankbar.

Gruß Thomas

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi Thomas,

erstmal herzlich willkommen bei uns auf dem Forum !

Auf Bibliotheksebene kenne ich mich da gar nicht aus, aber sonst würde ich sagen: er erwartet da einen XML-Header und bekommt ihn nicht.
(XML ist da immer etwas ausschweifend)

Die CL- Tools nehmen in dem Fall bestimmte Defaults, aber das kann man bei einer Bibliothek ja nicht voraussetzen.

Hat Dein Programm denn schon mal irgendwo erfolgreich kompiliert ?

track

Th0mmas

(Themenstarter)

Anmeldungsdatum:
21. November 2011

Beiträge: 3

Hallo trak,

ich habe mein Programm vor einigen Jahren erstellt und es ist seither produktiv im Einsatz. Nachdem ich jetzt eine Erweiterung einbauen wollte, lies sich das Programm problemlos kompilieren, aber nicht mehr linken (undefined reference). Um jeden Einfluss meines Programms auszuschliessen, habe ich es mit Beispielprogrammen von http://xmlsoft.org/examples/ versucht. Das Ergebnis ist dasselbe: Kompilieren funktioniert, Linken bringt Fehlermeldungen "undefined reference". Am Programmcode kann es also nicht liegen.

Thomas

tischbein

Avatar von tischbein

Anmeldungsdatum:
21. Juli 2008

Beiträge: 404

Th0mmas schrieb:

thomas@compi:/tmp$ cc `xml2-config --cflags --libs` a.c

Das problem ist hier die art und weise wie du den C compiler aufrufst.
Die meisten compiler sind sehr "Abhängigkeiten-sensitiv", sprich, abhängigkeit A muss vor abhängigkeit B, etc, kommen, ansonsten werden die abhängigkeiten nicht korrekt aufgelöst.

Der richtige befehl muss demnach so aussehen:

cc a.c `xml2-config --cflags --libs`

Hintergrund: Der quelltext in a.c nutzt libxml2 funktionen, sprich es sind bibliotheks-abhängigkeiten, aber in deinem befehl wird libxml2 verlinkt ehe das programm diese "zu sehen bekommt".

hth

Th0mmas

(Themenstarter)

Anmeldungsdatum:
21. November 2011

Beiträge: 3

Hallo Tischbein,

das war die Lösung! Vielen Dank für die Hilfe!

Gruß Thomas

Antworten |