C ++ Shared Library mit Vorlagen: Undefinierter Symbolfehler
Ich versuche, eine Verknüpfung zu einer freigegebenen Bibliothek mit einer Vorlagenklasse herzustellen, aber es werden "undefinierte Symbole" angezeigt. Ich habe das Problem auf ungefähr 20 Codezeilen verkürzt.
shared.h
<code>template <class Type> class myclass { Type x; public: myclass() { x=0; } void setx(Type y); Type getx(); }; </code>
shared.cpp
<code>#include "shared.h" template <class Type> void myclass<Type>::setx(Type y) { x = y; } template <class Type> Type myclass<Type>::getx() { return x; } </code>
main.cpp
<code>#include <iostream> #include "shared.h" using namespace std; int main(int argc, char *argv[]) { myclass<int> m; cout << m.getx() << endl; m.setx(10); cout << m.getx() << endl; return 0; } </code>
So kompiliere ich die Bibliothek:
<code>g++ -fPIC -c shared.cpp -o shared.o g++ -dynamiclib -Wl,-dylib_install_name -Wl,libshared.dylib -o libshared.dylib shared.o </code>
Und das Hauptprogramm:
<code>g++ -c main.cpp g++ -o main main.o -L. -lshared </code>
Nur um folgende Fehler zu bekommen:
<code>Undefined symbols: "myclass<int>::getx()", referenced from: _main in main.o _main in main.o "myclass<int>::setx(int)", referenced from: _main in main.o </code>
Wenn ich das 'Template'-Material entferneshared.h/cpp
, und ersetzen Sie sie mit nur "int", alles funktioniert gut. Auch, wenn ich einfach den Vorlagenklassencode kopiere und einfügemain.cpp
und nicht mit der gemeinsam genutzten Bibliothek verknüpfen, funktioniert auch alles.
Wie kann ich erreichen, dass eine Vorlagenklasse wie diese in einer gemeinsam genutzten Bibliothek funktioniert?
Ich verwende MacOS 10.5 mit GCC 4.0.1.