Package: g++-4.4 Version: 4.4.5-10 Severity: normal Hi,
I ran into this porting some existing code to armel, but a minimal example follows. Shown here using a cross compiler, but I've confirmed that it can be reproduced on native armel with both gcc-4.4 from squeeze and gcc-4.5 from experimental (4.5.2-1). $ cat Makefile out: b.o c.o $(CXX) $^ -o d $ cat a.h template <typename T> struct A { T a; virtual ~A() {} }; template struct A<int>; $ cat b.cpp #include "a.h" void use_A() { A<int> b; } $ cat c.cpp #include "a.h" int main() { A<int> c; return 0; } $ make CXX=arm-linux-gnueabi-g++ arm-linux-gnueabi-g++ -c -o b.o b.cpp arm-linux-gnueabi-g++ -c -o c.o c.cpp arm-linux-gnueabi-g++ b.o c.o -o d c.o:(.rodata+0x0): multiple definition of `typeinfo for A<int>' b.o:(.rodata+0x0): first defined here c.o:(.rodata+0x8): multiple definition of `typeinfo name for A<int>' b.o:(.rodata+0x8): first defined here collect2: ld returned 1 exit status This works fine on amd64 though. The interesting difference seems to be that amd64 produces: 0000000000000000 V _ZTI1AIiE 0000000000000000 V _ZTS1AIiE 0000000000000000 V _ZTV1AIiE While armel gives us: 00000000 R _ZTI1AIiE 00000008 R _ZTS1AIiE 00000000 V _ZTV1AIiE If the template is left to be implicitly instantiated, then armel also produces weak symbols for the typeinfo (but that causes other trouble in the original example). I found some hints of an earlier report upstream here: http://gcc.gnu.org/ml/gcc-help/2010-02/msg00361.html http://gcc.gnu.org/ml/gcc-help/2010-03/msg00007.html But that didn't seem to end with any real conclusion as to what the original problem was, which I think this example does demonstrate now. Cheers, Ron -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 2.6.32-5-amd64 (SMP w/4 CPU cores) Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages g++-4.4 depends on: ii gcc-4.4 4.4.5-10 The GNU C compiler ii gcc-4.4-base 4.4.5-10 The GNU Compiler Collection (base ii libc6 2.11.2-7 Embedded GNU C Library: Shared lib ii libgmp3c2 2:4.3.2+dfsg-1 Multiprecision arithmetic library ii libmpfr4 3.0.0-2 multiple precision floating-point ii libstdc++6-4.4-dev 4.4.5-10 The GNU Standard C++ Library v3 (d g++-4.4 recommends no packages. Versions of packages g++-4.4 suggests: pn g++-4.4-multilib <none> (no description available) ii gcc-4.4-doc 4.4.4.nf1-1 documentation for the GNU compiler pn libstdc++6-4.4-dbg <none> (no description available) -- no debconf information -- To UNSUBSCRIBE, email to debian-gcc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20101226070548.2482.77531.report...@audi.shelbyville.oz