Undefined Reference-Fehler Bei Verlinkung auf Statische Bibliothek

Ich versuche zu kompilieren eines Projekts, das hängt von der Xerces XML-Parser. Das Projekt kompiliert für Windows, ohne jede Schwierigkeit, aber ich habe einige Probleme beim kompilieren mit g++ unter Cygwin.

Um Xerces, ich bin versucht zu kompilieren meinen code gegen die statische Bibliothek libxerces-c.a. Aber wenn ich das mache, so bekomme ich Fehler, die wie folgt Aussehen:

/tmp/cc2QGvMh.o:test.cpp:(.text+0x3a): undefined reference to `xercesc_2_8::DOMImplementationRegistry::getDOMImplementation(unsigned short const*)'

Habe ich kontrolliert die statische Bibliothek, die mit ar, und bestätigt, dass es enthält die DOMImplementationRegistry.o - Datei definiert die Funktion, die ich aufrufen.

ar -t libxerces-c.a
...
DOMImplementationImpl.o
DOMImplementationRegistry.o
DOMLocatorImpl.o
...

Habe ich auch extrahiert das Objekt-Dateien aus der Bibliothek, und verwendet, 'nm', um sicherzustellen, dass die Funktion rufe ich die tatsächlich existiert:

ar -x libxerces-c.a
nm --demangle DOMImplementationRegistry.o
...
00000080 T xercesc_2_8::getDOMImplSrcVectorMutex()
00000300 T xercesc_2_8::DOMImplementationRegistry::getDOMImplementation(unsigned short const*)
000002a0 T xercesc_2_8::DOMImplementationRegistry::addSource(xercesc_2_8::DOMImplementationSource*)
...

Da kann ich kompilieren alles für Windows, aber nicht mit g++, dachte ich, dass könnte der Fehler sein in der linker, um (ähnlich wie das beschriebene problem in diese Frage). Jedoch, sogar nach dem ändern der linker um, ich bin noch immer die gleichen compiler-Fehler. Ich habe versucht, sowohl die

g++ -o test.exe test.cpp -Llib -lxerces-c

und

g++ -o test.exe test.cpp lib/libxerces-c.a

Irgendwelche Ideen?

  • Dies könnte möglicherweise problem der unterschiedlichen name mangling schema verwendet, die von verschiedenen Compilern. Könnte Sie liefern Ergebnisse von nm auf Ihre Objekt-Datei und library, ohne --demangle option?
  • verwenden Sie die korrekte Verteilung der Bibliothek? xerces-c_2_8_0-x86-linux-gcc_3_4.tar.gz ? oder hast du die Bibliothek selbst auf gcc?
InformationsquelleAutor theisenp | 2012-07-06
Schreibe einen Kommentar