This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
RE: Undefined reference to template function ...
- From: "Her, Il" <il dot her at hp dot com>
- To: Ian Lance Taylor <iant at google dot com>
- Cc: "gcc-help at gcc dot gnu dot org" <gcc-help at gcc dot gnu dot org>
- Date: Wed, 1 Jun 2011 01:03:03 +0000
- Subject: RE: Undefined reference to template function ...
- References: <7758AFD4380CD24F86D3266E0D083A0550544AF1C8@GVW1160EXB.americas.hpqcorp.net> <mcry61ns9mq.fsf@coign.corp.google.com> <7758AFD4380CD24F86D3266E0D083A0550544AF93B@GVW1160EXB.americas.hpqcorp.net> <mcrhb8brna9.fsf@coign.corp.google.com>
Yes, it is compiled well with gcc 3.4.6,
but it doesn't work with gcc 4.1.2
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