Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Content-return: allowed Date: Mon, 05 May 2003 13:29:03 -0400 From: "Julin, Joshua" Subject: Cygwin-gdb can't find linker symbol for virtual table To: "'cygwin AT cygwin DOT com'" Message-id: <3888FB26DD0ACF43B7D763789F84289629F337@EMSS03M13.us.lmco.com> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 7BIT Hey everybody, I'm getting an (incorrect?) warning in gdb whenever I try to debug classes with virtual functions. When I try to print out a member variable, gdb states "warning: can't find linker symbol for virtual table for `Object4' value". It then prints out the member variable correctly. This behavior is isolated to my cygwin configuration; I don't get this warning on my Linux box. I've searched the internet for this message and can't find any answers...Geoff Alexander did post this question a while back to multiple user groups, but to no avail. I've searched the gcc man page for 'virtual' but didn't find anything which would make the warning go away. This warning message is particularly annoying to me when I use insight, the gdb graphical debugger. insight causes about 1 to 20 useless dialog boxes to popup whenever I try to 'watch' a member variable. They all say the same thing: "can't find linker symbol for virtual table". Below I show some very simple code that causes this warning on my system. I also show what gdb commands I used to cause the warning message to appear. Thanks for any help, Josh Julin //---------------------------------------------------------------- //code (THIS CODE IS FINE, BUT CAUSES WARNING IN GDB) //---------------------------------------------------------------- class Object3 { public: int x; ~Object3() { } // no virtual foo }; class Object4 { public: int x; virtual ~Object4() { } // virtual foo }; int main() { Object3 * ptr3 = new Object3; Object4 * ptr4 = new Object4; // when I "watch" ptr4->x I get the warning } //---------------------------------------------------------------- // gcc version (ON CYGWIN) //---------------------------------------------------------------- gcc --version gcc (GCC) 3.2 20020927 (prerelease) //---------------------------------------------------------------- // gdb session on cygwin (NOTICE THE WARNING) //---------------------------------------------------------------- GNU gdb 2003-03-03-cvs (cygwin-special) Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-cygwin"... (gdb) b main Breakpoint 1 at 0x4010ae: file josh.cpp, line 17. (gdb) r Starting program: /home/josh/rearch/tryAgain/josh.exe Breakpoint 1, main () at josh.cpp:17 17 Object3 * ptr3 = new Object3; (gdb) n 18 Object4 * ptr4 = new Object4; (gdb) n 19 } (gdb) p ptr4->x warning: can't find linker symbol for virtual table for `Object4' value $1 = 0 (gdb) //---------------------------------------------------------------- // gdb session on linux (EVERYTHING WORKS!) //---------------------------------------------------------------- GNU gdb 5.3 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... (gdb) b main Breakpoint 1 at 0x8048656: file josh.cpp, line 17. (gdb) r Starting program: /home/josh/tmp/jjj/josh Breakpoint 1, main () at josh.cpp:17 17 Object * ptr1 = new Object(); (gdb) n 18 Object2 * ptr2 = new Object2(); (gdb) n 19 } (gdb) p ptr2->x $1 = 0 (gdb) -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/