c++ template instantiation problem on MAC OSX

Maria Lando mlando@watchpointmedia.com
Tue Jun 26 09:23:00 GMT 2001


Mac c++ compiler is based on the 2.95.2 gcc version, however templates
doesn't appear to work in the same way.  Did anyone have any similar
experience? 
Here is an example of the code that links to the template function
(plus) in the library.
 --------------------------------------------------- 
#include <stdio.h> 
#include <plus.h> 

int main(int argc, const char *const argv[]) 
{ 
 int y=10, x=5; 
 int z = plus(x,y); 
 fprintf(stderr,"z=%d\n",z); 
} 
----------------------------------------------------- 

Linking error: 

 make test 
c++ -c -I. -I/usr/local/include -g -Wall -ftemplate-depth-20 -O2 test.c 
c++ -o test test.o lib.a -L/usr/local/lib -ldat -lstdc++ 
/usr/bin/ld: Undefined symbols: 
_plus__H1Zi_RCX01n1_i make: *** [test] Error 1 

                         
Here is the library lib.a: 
file plus.h 
----------------------------------- 
#pragma interface 
                         
#include <string.h> 
#include <stdio.h> 
                         
template <class T> T plus(const T& a, const T& b);
                        
 --------------------------------------------------- 

                         
file plus.c 
------------------------------------------------- 
#include "plus.h"
#pragma implementation 

                         
template <class T> T plus(const T& a, const T& b) { return a + b; } 

                         
template int plus(const int&, const int&); 

                         
int main(int argc, const char *const argv[]) 
{ plus(10,10);                          
} 
---------------------------------------------------- 

                         
Library is compiled using the following command and compilation is seems
to be OK: 
c++ -c -I. -I/usr/local/include -g -Wall -ftemplate-depth-20 -O2 plus.c 
rm -f lib.a 
libtool -static -o lib.a -s plus.o 

                         
Thanks, 
-Maria



More information about the Gcc-help mailing list