Link dynamic shared library unter Linux - Undefined reference to function

Ich weiß, es gibt viele Fragen zu shared Bibliotheken auf Linux, aber vielleicht auch, weil ich bin müde, habe eine harte Zeit versucht, zu erstellen eine einfache dynamische Bibliothek unter Linux (unter Windows wäre weniger als 10 Minuten) ich kann nicht finden, was passiert in diesem Fall.
So, ich bin versucht, erstellen Sie eine Bibliothek verknüpft werden zur build-time und verwendet, die zur Laufzeit (nicht eine statische Bibliothek, nicht eine Bibliothek eingebettet werden in die ausführbare Datei, in anderen Worten). Für jetzt ist es enthält eine einfache Funktion. Das sind meine Dateien:

1.

//gugulibrary.cpp
//This is where my function is doing its job

#include "gugulibrary.h"

namespace GuGu {
    void SayHello() {
        puts("Hello!");
    }
}

2.

//gugulibrary.h
//This is where I declare my shared functions
#include <stdio.h>

namespace Gugu {
    void SayHello();
}

3.

//guguapp.cpp
//This is the executable using the library
#include "gugulibrary.h"

int main() {
    GuGu::SayHello();
    return 0;
}

Dies ist, wie ich versuche, mein Projekt (und ich denke, das ist, was falsch ist):

gcc -Wall -s -O2 -fPIC -c gugulibrary.cpp -o gugulibrary.o
ld -shared -o bin/libGugu.so gugulibrary.o
gcc -Wall -s -O2 guguapp.cpp -o bin/GuGu -ldl
export LD_LIBRARY_PATH=bin

Dieser gespeichert ist als .sh-Datei, die ich auf und führen Sie in einem terminal. Den Fehler bekomme ich beim Versuch die Verknüpfung der Bibliothek ist diese:

/tmp/ccG05CQD.o: In function `main':
guguapp.cpp:(.text.startup+0x7): undefined reference to `SayHello'
collect2: ld returned 1 exit status

Und das ist, wo ich bin verloren. Ich möchte die Bibliothek, um sich im gleichen Ordner wie die ausführbare Datei für jetzt und vielleicht brauche ich einige Symbole/Definitionen-Datei oder etwas, was ich nicht weiß, wie Sie zu erstellen.
Vielen Dank für Ihre Hilfe!

  • Wie es aussieht, fehlen -lGugu
  • Warum gcc? Warum nicht g++?
  • O. K. aber ich glaube nicht, dass wird das problem lösen. Vielen Dank, trotzdem!
  • Es ist auch nicht klar (zu mich), was ist der Punkt, der extern C wenn nicht in C Konstrukte wie namespace verwendet wird...
InformationsquelleAutor ali | 2013-01-03
Schreibe einen Kommentar