From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5459 invoked by alias); 25 Jun 2002 08:58:36 -0000 Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org Received: (qmail 5419 invoked from network); 25 Jun 2002 08:58:33 -0000 Received: from unknown (HELO ?202.139.137.236?) (202.139.137.236) by sources.redhat.com with SMTP; 25 Jun 2002 08:58:33 -0000 Received: from no.name.available by [202.139.137.236] via smtpd (for sources.redhat.com [209.249.29.67]) with SMTP; 25 Jun 2002 08:59:12 UT Received: from dr-honeydew.saabsystems.com.au ([10.16.39.1]) by smtp.saabsystems.com.au with Microsoft SMTPSVC(5.0.2195.2966); Tue, 25 Jun 2002 18:29:24 +0930 Subject: problems with undefined references Date: Tue, 25 Jun 2002 01:58:00 -0000 MIME-Version: 1.0 Message-ID: <7DA8A54A920E1441960C129BDDFE4E9A042390@dr-honeydew.saabsystems.com.au> Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C21C26.99B2C4C0" X-MS-Has-Attach: yes X-MS-TNEF-Correlator: content-class: urn:content-classes:message X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3 From: "Brad Douglas" To: X-OriginalArrivalTime: 25 Jun 2002 08:59:25.0011 (UTC) FILETIME=[9ABB8230:01C21C26] X-SW-Source: 2002-06/txt/msg00209.txt.bz2 This is a multi-part message in MIME format. ------_=_NextPart_001_01C21C26.99B2C4C0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 3499 Hi all, I'm trying to implement a shared memory manager, and I want to use a single= ton class to do so. I've also create a class to destroy the single instanc= e on process shut down and do the detach and free the shared memory if the = process is the last to detach. I found a good patter to do this using a fr= iend destoyer class as a static data member ala http://lib.stat.cmu.edu/~la= mj/sigs/c++-report/cppr9606.c.vlissides.html. I've cut my code right down = to a skeloton that reprodices the error (attached) I'm getting wierd linker errors saying that the static destroyer class is u= ndefined.... and nm confirms that the reference in Singleton.o is undefined= .... but clearly the static reference Singleton::destroyer is defined in th= e header. I've had a couple of people to a quick sanity test to see if I've stuffed s= omething obvious and we can't see anything. If anyone out there in gcc-lan= d can provide some insight I'd be might grateful. BTW: I'm using gcc 2.96 Here's the output form make: [xbd@tfsec help]$ make=20=20 ---------------------------------------------------------------------------= -- Generating: "Singleton.d" Reason: "Singleton.cpp Makefile" ---------------------------------------------------------------------------= -- /usr/bin/gcc -MMD -E -I/scratch/xbd/tflcs/src/include Singleton.cpp > /dev= /null ---------------------------------------------------------------------------= -- Building: "Singleton.o", Reason: "Singleton.cpp Singleton.d Makefile Sin= gleton.h" ---------------------------------------------------------------------------= -- /usr/bin/gcc -ggdb -pedantic -Wall -ansi -c -I/scratch/xbd/tflcs/src/includ= e Singleton.cpp -o Singleton.o make -C test make[1]: Entering directory `/scratch/xbd/tflcs/src/util/help/test' ---------------------------------------------------------------------------= -- Generating: "SingletonTest.d" Reason: "SingletonTest.cpp Makefile" ---------------------------------------------------------------------------= -- /usr/bin/gcc -MMD -E -I/scratch/xbd/tflcs/src/include -I.. -I../../include = SingletonTest.cpp > /dev/null make[1]: Leaving directory `/scratch/xbd/tflcs/src/util/help/test' make[1]: Entering directory `/scratch/xbd/tflcs/src/util/help/test' ---------------------------------------------------------------------------= -- Building: "SingletonTest.o", Reason: "SingletonTest.cpp SingletonTest.d = Makefile ../Singleton.h" ---------------------------------------------------------------------------= -- /usr/bin/gcc -ggdb -pedantic -Wall -ansi -c -I/scratch/xbd/tflcs/src/includ= e -I.. -I../../include SingletonTest.cpp -o SingletonTest.o SingletonTest.cpp: In function `int main (int, char **)': SingletonTest.cpp:8: warning: unused variable `Singleton *tmp' ---------------------------------------------------------------------------= -- Linking: "SingletonTest", Reason: "SingletonTest.o Makefile" ---------------------------------------------------------------------------= -- /usr/bin/gcc -ggdb -pedantic -Wall -ansi -lstdc++ ../Singleton.o Singleton= Test.o -o SingletonTest ../Singleton.o: In function `Singleton::getInstance(void)': /scratch/xbd/tflcs/src/util/help/Singleton.cpp:34: undefined reference to `= Singleton::destroyer' collect2: ld returned 1 exit status make[1]: *** [SingletonTest] Error 1 make[1]: Leaving directory `/scratch/xbd/tflcs/src/util/help/test' make: *** [test] Error 2 <> <> <>=20 ------_=_NextPart_001_01C21C26.99B2C4C0 Content-Type: application/octet-stream; name="Singleton.cpp" Content-Transfer-Encoding: base64 Content-Description: Singleton.cpp Content-Disposition: attachment; filename="Singleton.cpp" Content-length: 1997 DQojaW5jbHVkZSAiU2luZ2xldG9uLmgiDQoNCi8vPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLy8gU2luZ2xldG9uIGNsYXNzIGltcGxlbWVudGF0 aW9uDQoNCi8vIG9ubHkgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaXMgaW1w bGVtZW50ZWQgYXMgaXQgaXMgdGhlIG9ubHkgY29uc3RydWN0b3INCi8vIHRo YXQgd2lsbCBiZSB1c2VkIHNvIHdlIHdpbGwgbm90IGdldCAidW5kZWZpbmVk IHJlZmVyZW5jZXMiIGZvciB0aGUgY29weQ0KLy8gY29uc3RydWN0b3IgYW5k IGFzc2lnbm1lbnQgb3BlcmF0b3Igd2hlbiBsaW5raW5nDQovLw0KDQovLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIGluaXRpYWxpemUgdGhl IHBvaW50ZXIgdG8gdGhlIHNpbmdsZSBpc250YW5jZQ0KU2luZ2xldG9uKiBT aW5nbGV0b246Omluc3RhbmNlID0gMDsNCg0KDQovLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIGRlZmF1bHQgY29uc3RydWN0b3IgKGp1c3Qg aW5pdGlhbGlzZXMgaW1scCkNClNpbmdsZXRvbjo6U2luZ2xldG9uKCkNCnsg DQp9DQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gZ2V0 SW5zdGFuY2U6DQovLyAgICAgaWYgTlVMTCBjb25zdHJ1Y3QgdGhlIHNpbmxl IGluc3RhbmNlLCBvdGhlcndpc2UganVzdCByZXR1cm4gaXQNClNpbmdsZXRv biogU2luZ2xldG9uOjpnZXRJbnN0YW5jZSgpDQp7DQogICAgLy8gaXMgaXQg dGhlIGZpcnN0IGNhbGw/DQogICAgaWYgKGluc3RhbmNlID09IDApDQogICAg ew0KICAgICAgICAvLyBjcmVhdGUgc29sZSBpbnN0YW5jZQ0KICAgICAgICBp bnN0YW5jZSA9IG5ldyBTaW5nbGV0b247DQoNCiAgICAgICAgZGVzdHJveWVy LnNldFNpbmdsZXRvbihpbnN0YW5jZSk7DQogICAgfQ0KDQogICAgLy8gcmV0 dXJuIHRoZSBhZGRyZXNzIG9mIHNvbGUgaW5zdGFuY2UNCiAgICByZXR1cm4g aW5zdGFuY2U7DQp9DQoNClNpbmdsZXRvbjo6flNpbmdsZXRvbigpIA0Kew0K fQ0KDQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8vIFNpbmds ZXRvbkRlc3Ryb3llciBjbGFzcyBpbXBsZW1lbnRhdGlvbg0KDQpTaW5nbGV0 b25EZXN0cm95ZXI6On5TaW5nbGV0b25EZXN0cm95ZXIoKQ0Kew0KICAgIGRl bGV0ZSBpbnN0YW5jZTsNCn0NCg0Kdm9pZCBTaW5nbGV0b25EZXN0cm95ZXI6 OnNldFNpbmdsZXRvbiggU2luZ2xldG9uUHRyIF9pbnN0YW5jZSkNCnsNCiAg ICBpbnN0YW5jZSA9IF9pbnN0YW5jZTsNCn0NCg0KDQo= ------_=_NextPart_001_01C21C26.99B2C4C0 Content-Type: application/octet-stream; name="Singleton.h" Content-Transfer-Encoding: base64 Content-Description: Singleton.h Content-Disposition: attachment; filename="Singleton.h" Content-length: 3156 Ly8gTXVsdGlwbGUgSW5jbHVzaW9uIEd1YXJkIA0KI2lmbmRlZiBfU0lOR0xF VE9OIA0KI2RlZmluZSBfU0lOR0xFVE9ODQoNCi8vPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Kj0NCi8vIFNpbmdsZXRvbiBjbGFzcyBkZWZpbml0 aW9uDQovLw0KLy8gIFRoaXMgb2JqZWN0IGhhcyBvbmUgcHVycG9zZTogdG8g ZGVzdHJveSB0aGUgc2luZ2xlIGluc3RhbmNlIG9mIHRoZQ0KLy8gIFNpbmds ZXRvbiBvbiBwcm9jZXNzIHNodXRkb3duLiAgVGhpcyBpcyBhY2hpZXZlZCBi eSBoYXZpbmcgYSANCi8vICBzdGF0aWMgZGVzdHJveWVyIG1lbWJlciBpbiBp biB0aGUgc2luZ2xldG9uIChzdGF0aWMgZGF0YSBtZW1iZXJzIGFyZSANCi8v ICBkZXN0cm95ZWQgYXMgcGFydCBvZiBwcm9jZXNzIHNodXRkb3duKS4gDQov Lw0KY2xhc3MgU2luZ2xldG9uOw0KDQpjbGFzcyBTaW5nbGV0b25EZXN0cm95 ZXINCnsNCiAgICBwdWJsaWM6DQogICAgICAgIH5TaW5nbGV0b25EZXN0cm95 ZXIoKTsNCg0KICAgICAgICB2b2lkIHNldFNpbmdsZXRvbiggU2luZ2xldG9u ICogX2luc3RhbmNlKTsNCg0KICAgIHByaXZhdGU6DQogICAgICAgIFNpbmds ZXRvbiAqIGluc3RhbmNlOw0KfTsNCg0KLy89PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0qPQ0KLy8gU2luZ2xldG9uIGNsYXNzIGRlZmluaXRpb24N Cg0KY2xhc3MgU2luZ2xldG9uDQp7DQoNCiAgICBwdWJsaWM6DQogICAgICAg IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQogICAgICAgIC8vIGluaXRpYWxpc2F0aW9uIC8g YWNjZXNzIG1ldGhvZCANCiAgICAgICAgc3RhdGljIFNpbmdsZXRvbiAqIGdl dEluc3RhbmNlKCk7DQoNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgICAgLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCiAgICAgICAgLy8gY29uc3RydWN0b3JzIGV0Yw0KDQog ICAgICAgIC8vIGJ5IG1ha2luZyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBw cm90ZWN0ZWQgd2UgY2FuIGVuZm9yY2UNCiAgICAgICAgLy8gdGhlIHNpbmds ZXRvbiBuYXR1cmUsIHlldCBzdGlsbCBhbGxvdyBkZXJpdmVkIGNsYXNzZXMN CiAgICAgICAgU2luZ2xldG9uKCk7DQoNCiAgICAgICAgLy8gbGlrZXdpc2Ug dGhlIGNvcHkgY29uc3RydWN0b3INCiAgICAgICAgU2luZ2xldG9uKGNvbnN0 IFNpbmdsZXRvbiYpOw0KDQogICAgICAgIC8vIGRpdHRvIHRoZSBhc3NpZ25t ZW50IG9wZXJhdG9yDQogICAgICAgIFNpbmdsZXRvbiYgb3BlcmF0b3I9IChj b25zdCBTaW5nbGV0b24mKTsNCg0KICAgICAgICAvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ICAgICAgICAvLyBkZXN0cnVjdG9yIC0gd2UgZG9uJ3Qgd2FudCB1c2VycyAi ZGVsZXRlaW5nIiB0aGUgcmVmZXJuZW5jZQ0KICAgICAgICAvLyB0aGV5IGdl dCBlaXRoZXINCiAgICAgICAgdmlydHVhbCB+U2luZ2xldG9uKCk7ICAgIA0K DQogICAgcHJpdmF0ZToNCg0KICAgICAgICAvLyB0aGlzIGlzIHRoZSByZWZl cmVuY2UgdG8gdGhlIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzDQog ICAgICAgIHN0YXRpYyBTaW5nbGV0b24gKiBpbnN0YW5jZTsNCg0KICAgICAg ICAvLyBzdGF0aWMgbWVtYmVycyBhcmUgY2xlYW5lZCBvbiBwcm9ncmFtIGVu ZCBzbyB3ZSBjYW4gY3JlYXRlDQogICAgICAgIC8vIGEgZnJpZW5kIGRlc3Ry b3llciBjbGFzcyB0byBjbGVhbiB1cCB0aGUgaW5zdGFuY2UgKHdoaWNoIHdp bGwNCiAgICAgICAgLy8gZnJlZSB0aGUgc2hhcmVkIG1lbW9yeSBpZiBub3Qg b3RoZXIgcHJvY2Vzc2VzIGFyZSBhdHRhY2hlZA0KICAgICAgICAvLw0KICAg ICAgICAvLyAgaXQgaXMgZXNzZW50aWFsIHRvIGRlc3Ryb3kgdGhlIFNpbmds ZXRvbiBzbyB0aGF0IHdlIGdldA0KICAgICAgICAvLyAgYSBjaGFuY2UgdG8g ZGV0YWNoIGZvcm0gdGhlIHNoYXJlZCBtZW1vcnkgYW5kIHJlbGVhc2UgaXQg aWYgdGhlcmUNCiAgICAgICAgLy8gIGFyZSBubyBvdGhlciBwcm9jZXNzZXMg YXR0YWNoZWQNCiAgICAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZXRvbkRlc3Ry b3llcjsNCiAgICAgICAgc3RhdGljIFNpbmdsZXRvbkRlc3Ryb3llciBkZXN0 cm95ZXI7DQoNCn07DQp0eXBlZGVmIFNpbmdsZXRvbiAqIFNpbmdsZXRvblB0 cjsNCg0KI2VuZGlmICAvLyBfU0lOR0xFVE9ODQoNCg== ------_=_NextPart_001_01C21C26.99B2C4C0 Content-Type: application/octet-stream; name="SingletonTest.cpp" Content-Transfer-Encoding: base64 Content-Description: SingletonTest.cpp Content-Disposition: attachment; filename="SingletonTest.cpp" Content-length: 249 DQojaW5jbHVkZSA8c3RkaW8uaD4NCg0KI2luY2x1ZGUgIlNpbmdsZXRvbi5o Ig0KDQppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KSB7DQoNCiAg ICBTaW5nbGV0b25QdHIgdG1wID0gU2luZ2xldG9uOjpnZXRJbnN0YW5jZSgp Ow0KDQoJcHJpbnRmKCJIZWxsbyBXb3JsZFxuIik7DQoJcmV0dXJuIDA7DQp9 DQo= ------_=_NextPart_001_01C21C26.99B2C4C0--