Frage

Ich habe eine C ++ Bibliothek und eine C ++ Anwendung versuchen, aus der Bibliothek exportierten Funktionen und Klassen zu verwenden. Die Bibliothek baut in Ordnung und die Anwendung kompiliert, aber nicht zu verknüpfen. Die Fehler, die ich bekommen folgen Sie dieses Formular:

  

App-source-file.cpp :( Text + 0x2fdb.): Undefined reference to `lib-Namespace :: GetStatusStr (int)"

Klassen in der Bibliothek scheinen durch den Linker ganz gut gelöst werden, aber frei Funktionen und exportierten Daten (wie eine Cosinus-Lookup-Tabelle) immer in dem obigen Fehler zur Folge hat.

Ich bin mit Ubuntu 8.04 (Hardy), und es ist mit den neuesten Ubuntu-Paketen auf dem neuesten Stand.

Der Befehl, um die Bibliothek zu verknüpfen ist (mit anderen Bibliotheken entfernt):

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so

Der Befehl, um die Anwendung zu verknüpfen ist (mit anderen Bibliotheken entfernt):

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question

Schließlich scheint es (so gut wie ich das beurteilen kann), dass die Symbole in Frage richtig exportiert werden:

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
War es hilfreich?

Lösung

U vor _ZN3lib-namespace12GetStatusStrEi in nm-Ausgabe zeigt, dass das Symbol undefined in der Bibliothek.

Vielleicht ist es in der falschen Namensraum definiert. Es sieht aus wie Sie es in lib-namepace sind nennen, aber sie könnte es in einem anderen werden die Definition

Andere Tipps

Es ist eine Weile her, aber wenn Sie eine lib mit der Option -l angeben, dann haben Sie nicht das das Präfix lib überspringen?

(Ich änderte den Namen von „lib-in-question.so“ auf „libfoobar.so“ zur besseren Ablesbarkeit für das Beispiel unten)

g++ -fPIC -Wall -O3  -L~/project/lib/release -lfoobar

oder

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top