From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10896 invoked by alias); 21 Jan 2010 03:09:10 -0000 Received: (qmail 10859 invoked by uid 48); 21 Jan 2010 03:08:55 -0000 Date: Thu, 21 Jan 2010 03:09:00 -0000 Subject: [Bug target/42818] New: Static C++ linking breakage "undefined reference to ___real__Znwj" and others in libcygwin.a(_cygwin_crt0_common.o) X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "davek at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-01/txt/msg02472.txt.bz2 [ Don't Panic. There is already a fix for this bug, in fact two, one that is suitable for our current Stage 3(4?) status but slightly suboptimal, another that is better but blocked by an existing PR that won't be fixed until next Stage1. I just figured I should say that first of all. ] There's a problematic interaction between the parts of cygwin backend's linker specs, the cygwin libc CRT startup code, and the backend's support for N2800 #17.6.4.6 [replacement.functions]. When linking C++ executables statically, this leads to symptoms such as those reported here: http://cygwin.com/ml/cygwin/2009-12/msg00583.html /tmp/winsup/i686-pc-cygwin/winsup/cygwin/libcygwin.a(_cygwin_crt0_common.o):_cyg > win_crt0_common.cc:(.data+0x0): undefined reference to `___real__Znwj' > /tmp/winsup/i686-pc-cygwin/winsup/cygwin/libcygwin.a(_cygwin_crt0_common.o):_cyg > win_crt0_common.cc:(.data+0x4): undefined reference to `___real__Znaj' > /tmp/winsup/i686-pc-cygwin/winsup/cygwin/libcygwin.a(_cygwin_crt0_common.o):_cyg > win_crt0_common.cc:(.data+0x8): undefined reference to `___real__ZdlPv' > collect2: ld returned 1 exit status > make[1]: *** [cygserver.exe] Error 1 The particular functions reported as undefined will be whatever subset of the replaceable new/delete operators are referenced in the executable and drawn into the final link. I'll post analysis, patches and test results as separate comments. I've not set the severity of this bug any higher than "normal" because it's already/about-to-be fixed, but I'm going to leave it open after applying the stage3-suitable fix to remind me to apply the more optimal one when we return to stage 1 and Bug 41594 and/or Bug 41596 get fixed. -- Summary: Static C++ linking breakage "undefined reference to ___real__Znwj" and others in libcygwin.a(_cygwin_crt0_common.o) Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: missed-optimization, link-failure Severity: normal Priority: P3 Component: target AssignedTo: davek at gcc dot gnu dot org ReportedBy: davek at gcc dot gnu dot org GCC build triplet: i686-pc-cygwin GCC host triplet: i686-pc-cygwin GCC target triplet: i686-pc-cygwin BugsThisDependsOn: 41594,41596 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42818