Xref: news-dnh.mv.net comp.os.msdos.djgpp:2199 Path: news-dnh.mv.net!mv!news.sprintlink.net!EU.net!Belgium.EU.net!chaos.kulnet.kuleuven.ac.be!verhaege From: verhaege AT esat DOT kuleuven DOT ac DOT be (Wim Verhaegen) Newsgroups: comp.os.msdos.djgpp Subject: Problems with linking of pure virtual functions: the solution! Date: 26 Sep 1995 14:20:34 GMT Organization: K.U.Leuven Lines: 33 Nntp-Posting-Host: kwak.esat.kuleuven.ac.be Keywords: pure virtual To: djgpp AT sun DOT soe DOT clarkson DOT edu Dj-Gateway: from newsgroup comp.os.msdos.djgpp For all those who have problems with linking pure virtual functions, here's the solution (which I've found thanks to the hints given by Gordon J. Hogenson). The problem is in libgcc.a: it must contain a module called ___pure_virtual. (Yes, with 3 leading underscores.) If it's not there, you can install a newer version of libgcc.a (which isn't easy to find), but it's much easier and cheaper to fix it yourself. First you make a C file consisting of the following line: void __pure_virtual(void) { abort(); } Note 1: it really has to be a C file, as the C++ compiler puts type information in the module name. Note 2: There HAVE to be exactly 2 leading underscores in the function name. Note 3: The abort() isn't really necessary. The use of pure virtual functions makes the class an abstract data class. You can't create an object of this class, so you can't call the member functions either! (But don't forget to override them in the derived classes.) Then you compile this file and put the resulting .o file in libgcc.a with the following command: as rv libgcc.a This should do the trick! -- Wim Verhaegen | The man who got obsessed by pure virtual functions. Dept. of Electrical Engineering | KU Leuven, Belgium | wim DOT verhaegen AT esat DOT kuleuven DOT ac DOT be |