From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18679 invoked by alias); 16 Nov 2019 03:35:44 -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 18672 invoked by uid 89); 16 Nov 2019 03:35:43 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=AWL,BAYES_00,MISSING_HEADERS,RCVD_IN_DNSWL_LOW autolearn=no version=3.3.1 spammy= X-HELO: smtp-out-so.shaw.ca Received: from smtp-out-so.shaw.ca (HELO smtp-out-so.shaw.ca) (64.59.136.139) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 16 Nov 2019 03:35:42 +0000 Received: from [192.168.1.114] ([24.64.172.44]) by shaw.ca with ESMTP id Vos7i4vVD17ZDVos8iW5Kj; Fri, 15 Nov 2019 20:35:40 -0700 Reply-To: Brian.Inglis@SystematicSw.ab.ca Subject: Re: linker fails with multiple definitions after inline thread_local var within class Cc: cygwin@cygwin.com References: <769583d7-b1d7-fbc3-15ec-d377163c9d7f@SystematicSw.ab.ca> From: Brian Inglis Openpgp: preference=signencrypt Message-ID: Date: Sat, 16 Nov 2019 03:54:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2019-11/txt/msg00099.txt.bz2 On 2019-11-15 15:25, Arthur Norman wrote: >> I notice that you are not independently compiling your source files and have no >> include guard in t.h. >> Could I suggest that you add the include guard to t.h and retest. >> If you still have an issue, try independently compiling your source files, then >> linking them as a separate step, to see if that works. >> You could also test reproducing the issue on another gcc platform, under a Unix >> VM, or a WSL Linux distro. > > I attach a versiuon of the test with an include guard and with t1.cpp and t2.cpp > compiled in separate invocations of g++ - I still see the multiple definition. > > ${1:-g++} -std=c++17 -I. -c t1.cpp > ${1:-g++} -std=c++17 -I. -c t2.cpp > ${1:-g++} -std=c++17 t1.o t2.o -o t > /usr/lib/gcc/x86_64-pc-cygwin/8.3.0/../../../../x86_64-pc-cygwin/bin/ld: > t2.o:t2.cpp:(.text+0x86): multiple definition of `TLS init function for > Data::valref'; t1.o:t1.cpp:(.text+0x4a): first defined here > collect2: error: ld returned 1 exit status > ./t > > As per my original posting before enquiring here I had tried on a 64-bit ubuntu > machine, on a Macbook (where it is clang not g++, but I invoke the compiler as > g++) and on a Raspberry pi. Sorry missed that. > The original code I had pain with was with include guards and all files compiled > independently via make - the test casee I submitted had perhaps tried to hard to > shorten and simplify. > > I also tried both 32 and 64-bit mingw compilers under cygwin - making that > easier is why the test script goes ${1:-g++} so I can override the compiler > selection to be x86_64-w64-mingw32-g++ or the i686 variant. Those both show the > multiple definition problem. That points to a common problem with the loader generating Windows PEs: it is possible that is a Windows limitation. As ld is part of binutils, you might want to try searching and posting on that mailing list, conveniently located just next door: https://sourceware.org/binutils/ http://sourceware.org/ml/binutils/ http://lists.gnu.org/archive/html/bug-binutils/ before looking further at gcc. Please emphasize clearly that this works successfully with ELF executables on Unix platforms, and list those; and ld fails only with Windows (PE) executables using Cygwin and Mingw 32/64 tool chains, and list those; and include the test code, commands and results on each platform, to clearly demonstrate the issue. Use a specific subject to get appropriate attention and a relevant response e.g. "ld fails only for Windows PE with multiple definition of TLS init function". -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised. -- 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