Mail Archives: djgpp/1995/09/26/14:40:09
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 <name of the .o file>
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 |
- Raw text -