C++ de la Bibliothèque Partagée à l'aide de Modèles: les symboles non définis erreur

Je suis en train de lien à une bibliothèque partagée avec une classe de modèle, mais il me donne des "symboles non définis" erreurs. J'ai condensé le problème à environ 20 lignes de code.

partagé.h

template <class Type> class myclass {
  Type x;
public:
  myclass() { x=0; }
  void setx(Type y);
  Type  getx();
};

shared.cpp

#include "shared.h"
template <class Type> void myclass<Type>::setx(Type y) { x = y; }
template <class Type> Type myclass<Type>::getx() { return x; }

main.cpp

#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;
}

C'est comment j'ai compiler la bibliothèque:

g++ -fPIC -c shared.cpp -o shared.o
g++ -dynamiclib -Wl,-dylib_install_name -Wl,libshared.dylib -o libshared.dylib shared.o

Et le programme principal:

g++ -c main.cpp
g++ -o main  main.o -L. -lshared

Seulement pour obtenir les erreurs suivantes:

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

Si je retire le "modèle" des trucs dans shared.h/cpp, et de les remplacer avec juste "int", tout fonctionne bien. Aussi, si j'ai juste copier&coller le modèle de code de classe à droite dans main.cpp, et de ne pas accéder à la bibliothèque partagée, tout fonctionne bien.

Comment puis-je obtenir un modèle de classe comme ceci fonctionne grâce à une bibliothèque partagée?

Je suis sous MacOS 10.5 avec GCC 4.0.1.

InformationsquelleAutor nolk | 2009-06-20