From: Axel Freyn <axel-freyn@gmx.de>
To: "Her, Il" <il.her@hp.com>
Cc: Ian Lance Taylor <iant@google.com>,
"gcc-help@gcc.gnu.org" <gcc-help@gcc.gnu.org>
Subject: Re: Undefined reference to template function ...
Date: Wed, 01 Jun 2011 08:45:00 -0000 [thread overview]
Message-ID: <20110601084446.GQ13140@axel> (raw)
In-Reply-To: <7758AFD4380CD24F86D3266E0D083A0550544AFE4D@GVW1160EXB.americas.hpqcorp.net>
Hi
On Wed, Jun 01, 2011 at 01:03:03AM +0000, Her, Il wrote:
> Yes, it is compiled well with gcc 3.4.6,
> but it doesn't work with gcc 4.1.2
Strange -- I just tried with 3.4.6 on x86_64, configured as
../gcc-3.4.6/configure --prefix=/tmp/gcc_test/install --disable-multilib
Thread model: posix
gcc version 3.4.6
your testcase gives (after removing the erroneous ";" in sub.cpp )
/tmp/ccGJf1zv.o: In function `main':
/tmp/gcc_test/main.cpp:9: undefined reference to `Base<TEST>::dump(TEST&)'
/tmp/gcc_test/main.cpp:10: undefined reference to `Base<TEST>::fn(int, int)'
collect2: ld returned 1 exit status
(however, I did compile without the flag "-dynamic", which is only vaild
on darwin. But according to the docs, "-dynamic" is a flag for the
linker - so I don't see how it would influence the template
instantiation....)
Axel
>
>
> thank you
>
> Her, Il
> Technology Consulting
> Technology Service Korea
>
> TELÂ : +82-2-2199-4475
> Mobile : +82-10-4765-5597
> il.her@hp.com
>
> -----Original Message-----
> From: Ian Lance Taylor [mailto:iant@google.com]
> Sent: Tuesday, May 31, 2011 10:51 PM
> To: Her, Il
> Cc: gcc-help@gcc.gnu.org
> Subject: Re: Undefined reference to template function ...
>
> "Her, Il" <il.her@hp.com> 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 <stdio.h>
> > template <typename T> struct Base
> > {
> > void dump(T &r);
> > int fn(int a, int b);
> > };
> >
> > [sub.cpp]
> > #include "sub.h"
> >
> > template<typename T> void Base<T>::dump(T &r)
> > {
> > }
> >
> > template<typename T> int Base<T>::fn(int a, int b);
> > {
> > return 0;
> > }
> >
> > [main.cpp]
> > #include <stdio.h>
> > #include "sub.h"
> > #include "TEST.h"
> >
> > int main()
> > {
> > Base<TEST> 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<TEST>::dump(TEST&)`
> > /home/guinsa/main.cpp:11: undefined reference to `Base<TEST>::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
next prev parent reply other threads:[~2011-06-01 8:45 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-30 8:32 Her, Il
2011-05-31 8:53 ` Ian Lance Taylor
2011-05-31 12:21 ` Her, Il
2011-05-31 12:44 ` Axel Freyn
2011-05-31 15:29 ` Ian Lance Taylor
2011-06-01 1:03 ` Her, Il
2011-06-01 8:45 ` Axel Freyn [this message]
2011-06-01 13:23 ` Ian Lance Taylor
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110601084446.GQ13140@axel \
--to=axel-freyn@gmx.de \
--cc=gcc-help@gcc.gnu.org \
--cc=iant@google.com \
--cc=il.her@hp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).