From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 632 invoked by alias); 12 Nov 2013 23:38:05 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 620 invoked by uid 89); 12 Nov 2013 23:38:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_60,RDNS_NONE,SPF_NEUTRAL,URIBL_BLOCKED autolearn=no version=3.3.2 X-HELO: bureau92.ns.utoronto.ca Received: from Unknown (HELO bureau92.ns.utoronto.ca) (128.100.132.250) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Tue, 12 Nov 2013 23:38:03 +0000 Received: from [192.168.1.111] (69-165-141-247.dsl.teksavvy.com [69.165.141.247]) (authenticated bits=0) by bureau92.ns.utoronto.ca (8.13.8/8.13.8) with ESMTP id rACNbqJD019593 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 12 Nov 2013 18:37:54 -0500 Message-ID: <5282BBCF.9040703@cs.utoronto.ca> Date: Tue, 12 Nov 2013 23:38:00 -0000 From: Ryan Johnson User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 MIME-Version: 1.0 To: cygwin@cygwin.com Subject: Re: C++11 program link failure under GCC 4.8.2-1 References: <52815780.2010006@gmail.com> <528159F8.2070307@gmail.com> <5281F8D4.4090809@gmail.com> <5282ABED.7040400@gmail.com> In-Reply-To: <5282ABED.7040400@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2013-11/txt/msg00249.txt.bz2 On 12/11/2013 5:30 PM, JonY wrote: > On 11/13/2013 02:35, Yucong Sun wrote: >> Good new! I've found the link failure issue, it is caused by "-rdynamic" >> >> sunyc@sunyc-wks ~ >> $ cat 2.cc >> #include >> >> struct tick_event { >> int i; >> }; >> >> int main() { >> std::deque list; >> >> tick_event *a = new tick_event; >> list.push_back(a); >> return 0; >> } >> >> sunyc@sunyc-wks ~ >> $ g++ -c --std=c++11 -O3 -flto 2.cc -o 2.o >> >> sunyc@sunyc-wks ~ >> $ g++ --std=c++11 -flto -D_GNU_SOURCE -rdynamic -fno-omit-frame-pointer -D_GNU_ >> SOURCE -march=native -O3 2.o -o a >> Cannot export _ZNSt5dequeIP10tick_eventSaIS1_EE16_M_push_back_auxIJRKS1_EEEvDpOT >> _: symbol wrong type (4 vs 3) >> collect2: error: ld returned 1 exit status >> >> >> sunyc@sunyc-wks ~ >> $ g++ --std=c++11 -flto -D_GNU_SOURCE -fno-omit-frame-pointer -D_GNU_SOURCE -ma >> rch=native -O3 2.o -o a >> >> sunyc@sunyc-wks ~ >> $ >> >> Hope it would help you nail the problem. >> > -rdynamic shouldn't do anything on Windows, I guess using ELF specific > arguments can break things. >> And Here's the test case for snprintf & c++11 >> >> $ gcc -v >> Using built-in specs. >> COLLECT_GCC=gcc >> COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-cygwin/4.8.2/lto-wrapper.exe >> Target: x86_64-pc-cygwin >> Configured with: /cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.2-1/src/gcc-4.8.2/co >> nfigure --srcdir=/cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.2-1/src/gcc-4.8.2 -- >> prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdi >> r=/usr/libexec --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --lib >> dir=/usr/lib --datarootdir=/usr/share --docdir=/usr/share/doc/gcc -C --build=x86 >> _64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin --without-libico >> nv-prefix --without-libintl-prefix --enable-shared --enable-shared-libgcc --enab >> le-static --enable-version-specific-runtime-libs --enable-bootstrap --disable-__ >> cxa_atexit --with-dwarf2 --with-tune=generic --enable-languages=c,c++,fortran,lt >> o,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --ena >> ble-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support - >> -enable-libssp --enable-libgcj-sublibs --disable-java-awt --disable-symvers --wi >> th-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-incl >> ude=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix -- >> with-system-zlib >> Thread model: posix >> gcc version 4.8.2 (GCC) >> >> >> sunyc@sunyc-wks ~ >> $ cat 1.cc >> #include >> >> int main() { >> char out[255]; >> snprintf(out, sizeof(out), "%d", 1); >> return 1; >> } >> >> sunyc@sunyc-wks ~ >> $ g++ --std=c++11 1.cc >> 1.cc: In function ‘int main()’: >> 1.cc:5:36: error: ‘snprintf’ was not declared in this scope >> snprintf(out, sizeof(out), "%d", 1); >> ^ >> >> sunyc@sunyc-wks ~ >> $ g++ --std=gnu++0x 1.cc >> >> sunyc@sunyc-wks ~ >> $ ls -lah a.exe >> -rwxr-xr-x 1 sunyc None 62K Nov 12 10:21 a.exe >> >> Cheers. >> > Right now, it is guarded by: > #if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) > > Which means non-strict mode and C99 mode, snprintf was not part of > C++03. I guess (__cplusplus >= 201103L) needs to be added to newlib. Yes, this has come up before [1]. Several *printf variants are affected IIRC. [1] http://cygwin.com/ml/cygwin/2012-04/msg00140.html Ryan -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple