From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17446 invoked by alias); 31 May 2011 13:51:57 -0000 Received: (qmail 17436 invoked by uid 22791); 31 May 2011 13:51:56 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 31 May 2011 13:51:34 +0000 Received: from hpaq3.eem.corp.google.com (hpaq3.eem.corp.google.com [172.25.149.3]) by smtp-out.google.com with ESMTP id p4VDpWhc015781 for ; Tue, 31 May 2011 06:51:33 -0700 Received: from pxi6 (pxi6.prod.google.com [10.243.27.6]) by hpaq3.eem.corp.google.com with ESMTP id p4VDpDHI013828 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Tue, 31 May 2011 06:51:31 -0700 Received: by pxi6 with SMTP id 6so2665256pxi.31 for ; Tue, 31 May 2011 06:51:30 -0700 (PDT) Received: by 10.68.1.35 with SMTP id 3mr2485075pbj.7.1306849890848; Tue, 31 May 2011 06:51:30 -0700 (PDT) Received: from coign.google.com ([66.109.103.84]) by mx.google.com with ESMTPS id m9sm54338pbd.71.2011.05.31.06.51.28 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 31 May 2011 06:51:30 -0700 (PDT) From: Ian Lance Taylor To: "Her\, Il" Cc: "gcc-help\@gcc.gnu.org" Subject: Re: Undefined reference to template function ... References: <7758AFD4380CD24F86D3266E0D083A0550544AF1C8@GVW1160EXB.americas.hpqcorp.net> <7758AFD4380CD24F86D3266E0D083A0550544AF93B@GVW1160EXB.americas.hpqcorp.net> Date: Tue, 31 May 2011 15:29:00 -0000 In-Reply-To: <7758AFD4380CD24F86D3266E0D083A0550544AF93B@GVW1160EXB.americas.hpqcorp.net> (Il Her's message of "Tue, 31 May 2011 05:59:40 +0000") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org X-SW-Source: 2011-05/txt/msg00453.txt.bz2 "Her, Il" writes: > Thank you for answering my question. > Here is my sample. > > [Test.h] > #ifndef __TEST_hh > #define __TEST_hh > struct TEST > { > int a, b; > }; > #endif > > [sub.h] > #include > template struct Base > { > void dump(T &r); > int fn(int a, int b); > }; > > [sub.cpp] > #include "sub.h" > > template void Base::dump(T &r) > { > } > > template int Base::fn(int a, int b); > { > return 0; > } > > [main.cpp] > #include > #include "sub.h" > #include "TEST.h" > > int main() > { > Base t; > TEST x; > > t.dump(x); > t.fn(1, 2); > } > > ** Result of compiling > [test@test-1] $ g++ -c -dynamic sub.cpp > [test@test-1] $ g++ -shared -o libsub.so sub.o > [test@test-1] $ g++ -g -W -o main main.cpp -lsub -L./ > /tmp/ccaUlqlQ.o: In function `main`: > /home/guinsa/main.cpp:10: undefined reference to `Base::dump(TEST&)` > /home/guinsa/main.cpp:11: undefined reference to `Base::fn(int, int)` > collect2: ld returned 1 exit status In your earlier message you said that you had code that worked with gcc 3.4.6 but failed with gcc 4.1.2. Does this test case work with gcc 3.4.6? Ian