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.cppund 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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage