KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to link to a shared library with a template class, but it is giving me "undefined symbols" errors. I've condensed the problem to about 20 lines of code. shared.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; } This is how I compile the library: g++ -fPIC -c shared.cpp -o shared.o g++ -dynamiclib -Wl,-dylib_install_name -Wl,libshared.dylib -o libshared.dylib shared.o And the main program: g++ -c main.cpp g++ -o main main.o -L. -lshared Only to get the following errors: 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 If I remove the 'template' stuff in shared.h/cpp , and replace them with just 'int', everything works fine. Also, if I just copy&paste the template class code right into main.cpp , and don't link to the shared library, everything works as well. How can I get a template class like this to work through a shared library? I'm using MacOS 10.5 with GCC 4.0.1.
Tags (comma-separated)
Save Edits
Cancel