Kompilace template v C++ ( trochu delsi )
Jan Kurik
kurik na amis.cz
Čtvrtek Duben 22 07:08:51 CEST 1999
Ahoj !
Omlouvam se, ze je to trochu mimo ramec konference, ale uz fakt nevim co
s tim :-(
Mam problem, jak zakompilovat ( resp. slinkovat ) template v C++ do
staticke knihovny a potom tuto knihovnu i s temi template prilinkovat k
vysledne binarce.
Abych to rozepsal :
Vytvarim statickou knihovnu, ktera se sklada z nekolika *.C a *.h
souboru. Jeden z techto souboru ( GenList.h ) obsahuje neco na zpusob
tohoto :
template <class T>
#pragma interface
class PSL_genlist : public PSL_list {
PSL_genlist() {};
~PSL_genlist() {};
void print(char * msg);
...
};
Soubor GenList.C obsahuje implementaci jednotlivych metod teto sablony.
Treba toto :
template <class T>
void PSL_genlist<T>::print(char * msg)
{
...
}
Potom na to postvu g++ nasledne :
g++ -c -fexternal-templates *.C
To mi udela *.o soubory, jez slepim ar-em dohromady :
ar -r *.o libknihovna.a
No a potom to chci pouzit v nejakem programu. Takze si do zdrojaku dam
#include <GenList.h> a prelozim to nasledovne :
g++ *.C -o program -fexternal-templates -L<cesta_ke_knihovne> -lknihovna
Preklad do *.o souboru projde bez problemu, ale v okamziku, kdy se to
snazi linker slepit dohromady, tak dostanu nasledujici hlaseni :
Unsatisfied symbol:
PSL_genlist<pouzity_typ>::print(char * msg)
...
Protoze uz nad tim dumam asi dva dny, precetl jsem uz kilometry
dokumentace a porad jsem na tom stejne ( to jest bez uspechu ), tak Vas
zadam o radu. Jak vytvorit knihovnu s viditelnyma template, resp. jak to
potom prilinkovat k programu ?
Diky za vsechny namety.
--
Jan Kurik <kurik na amis.cz>
Další informace o konferenci Linux