This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
g++/cygwin-B19 linkage problem, multiple definitions
- To: "'egcs-bugs at cygnus dot com'" <egcs-bugs at cygnus dot com>
- Subject: g++/cygwin-B19 linkage problem, multiple definitions
- From: Jan Reimers <janr at molienergy dot bc dot ca>
- Date: Tue, 27 Oct 1998 16:49:23 -0800
bash-2.01$ g++ -o test2 -I. -O2 test2.cc obj.cc
C:\TEMP\ccfBTKHc.o(.text+0x14):obj.cc: multiple definition of
`Middle<int>::~Mid
dle(void)'
C:\TEMP\ccQp5XtO.o(.text$_$_t6Middle1Zi+0x0):test2.cc: first defined
here
collect2: ld returned 1 exit status
bash-2.01$
The following are required to get the multiple definition:
1) Base must virtually inherited from Middle.
2) The compiler has to create ~Middle().
Details:
bash-2.01$ g++ -o test2 -I. -O2 test2.cc obj.cc -v
Reading specs from
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\specs
gcc version egcs-2.91.57 19980901 (egcs-1.1 release)
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\cpp.exe -lang-c++
-v -I. -
iprefix
C:/Cygnus/B19/H-i386-cygwin32/lib/gcc-lib/i586-pc-cygwin32\egcs-2.91.57\
-undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91
-Di386 -D_WI
N32 -D__CYGWIN32__ -DWINNT -D_X86_=1 -D__STDC__=1
-D__stdcall=__attribute__((__s
tdcall__)) -D__cdecl=__attribute__((__cdecl__))
-D__declspec(x)=__attribute__((x
)) -D__i386__ -D_WIN32 -D__CYGWIN32__ -D__WINNT__ -D_X86_=1 -D__STDC__=1
-D__std
call=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__))
-D__decls
pec(x)=__attribute__((x)) -D__i386 -D__WINNT -Asystem(winnt) -Acpu(i386)
-Amachi
ne(i386) -D__EXCEPTIONS -D__OPTIMIZE__ -remap -Asystem(unix) -Acpu(i386)
-Amachi
ne(i386) -Di386 -D__i386 -D__i386__ -Di586 -Dpentium -D__i586 -D__i586__
-D__pen
tium -D__pentium__ test2.cc C:\TEMP\ccSgueCH.ii
GNU CPP version egcs-2.91.57 19980901 (egcs-1.1 release) (80386, BSD
syntax)
#include "..." search starts here:
#include <...> search starts here:
.
\usr\local\include\g++
\usr\local\include
\usr\local\i586-pc-cygwin32\include
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\include
\usr\include
End of search list.
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\cc1plus.exe
C:\TEMP\ccSgue
CH.ii -quiet -dumpbase test2.cc -O2 -version -o C:\TEMP\cczEb8iX.s
GNU C++ version egcs-2.91.57 19980901 (egcs-1.1 release)
(i586-pc-cygwin32) comp
iled by GNU C version egcs-2.91.57 19980901 (egcs-1.1 release).
as -o C:\TEMP\ccQlsljc.o C:\TEMP\cczEb8iX.s
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\cpp.exe -lang-c++
-v -I. -
iprefix
C:/Cygnus/B19/H-i386-cygwin32/lib/gcc-lib/i586-pc-cygwin32\egcs-2.91.57\
-undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91
-Di386 -D_WI
N32 -D__CYGWIN32__ -DWINNT -D_X86_=1 -D__STDC__=1
-D__stdcall=__attribute__((__s
tdcall__)) -D__cdecl=__attribute__((__cdecl__))
-D__declspec(x)=__attribute__((x
)) -D__i386__ -D_WIN32 -D__CYGWIN32__ -D__WINNT__ -D_X86_=1 -D__STDC__=1
-D__std
call=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__))
-D__decls
pec(x)=__attribute__((x)) -D__i386 -D__WINNT -Asystem(winnt) -Acpu(i386)
-Amachi
ne(i386) -D__EXCEPTIONS -D__OPTIMIZE__ -remap -Asystem(unix) -Acpu(i386)
-Amachi
ne(i386) -Di386 -D__i386 -D__i386__ -Di586 -Dpentium -D__i586 -D__i586__
-D__pen
tium -D__pentium__ obj.cc C:\TEMP\ccSgueCH.ii
GNU CPP version egcs-2.91.57 19980901 (egcs-1.1 release) (80386, BSD
syntax)
#include "..." search starts here:
#include <...> search starts here:
.
\usr\local\include\g++
\usr\local\include
\usr\local\i586-pc-cygwin32\include
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\include
\usr\include
End of search list.
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\cc1plus.exe
C:\TEMP\ccSgue
CH.ii -quiet -dumpbase obj.cc -O2 -version -o C:\TEMP\cczEb8iX.s
GNU C++ version egcs-2.91.57 19980901 (egcs-1.1 release)
(i586-pc-cygwin32) comp
iled by GNU C version egcs-2.91.57 19980901 (egcs-1.1 release).
as -o C:\TEMP\cchCkarg.o C:\TEMP\cczEb8iX.s
\usr\local\lib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57\collect2.exe -o
test2.exe
\usr\local\lib\crt0.o -LC:\Cygnus\B19\H-i386-cygwin32\lib\gcc-lib
-L\usr\local\l
ib\gcc-lib\i586-pc-cygwin32\egcs-2.91.57
-L\usr\local\i586-pc-cygwin32\lib -L\us
r\local\lib C:\TEMP\ccQlsljc.o C:\TEMP\cchCkarg.o -lstdc++ -lm -lgcc
-lcygwin -l
kernel32 -ladvapi32 -lshell32 -lgcc
C:\TEMP\cchCkarg.o(.text+0x14):obj.cc: multiple definition of
`Middle<int>::~Mid
dle(void)'
C:\TEMP\ccQlsljc.o(.text$_$_t6Middle1Zi+0x0):test2.cc: first defined
here
collect2: ld returned 1 exit status
bash-2.01$
________________________
Jan N. Reimers
Manager, Materials Research
Moli, Energy (1990) Ltd.
________________________
test2.h
test2.cc
obj.cc