Biblioteka współdzielona C ++ z szablonami: błąd niezdefiniowanych symboli

Próbuję połączyć się z biblioteką współdzieloną za pomocą klasy szablonu, ale daje mi błędy „niezdefiniowanych symboli”. Skondensowałem problem do około 20 linii kodu.

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>

Tak kompiluję bibliotekę:

<code>g++ -fPIC -c shared.cpp -o shared.o
g++ -dynamiclib -Wl,-dylib_install_name -Wl,libshared.dylib -o libshared.dylib shared.o
</code>

I program główny:

<code>g++ -c main.cpp
g++ -o main  main.o -L. -lshared
</code>

Aby uzyskać następujące błędy:

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

Jeśli usunę elementy „szablonu” wshared.h/cppi zastąp je tylko „int”, wszystko działa dobrze. Ponadto, jeśli po prostu skopiuję i wkleję kod klasy szablonu bezpośrednio domain.cppi nie łącz z biblioteką współdzieloną, wszystko działa dobrze.

Jak uzyskać taką klasę szablonów do pracy w bibliotece współdzielonej?

Używam MacOS 10.5 z GCC 4.0.1.

questionAnswers(4)

yourAnswerToTheQuestion