delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/1999/06/11/11:58:09

From: pavenis AT lanet DOT lv
Message-ID: <B0000090269@stargate.astr.lu.lv>
To: djgpp-workers AT delorie DOT com, egcs-bugs AT egcs DOT cygnus DOT com
Date: Fri, 11 Jun 1999 18:57:57 +0300
MIME-Version: 1.0
Subject: Problem with libg++-2.8.1.3 tests (libg++/etc/PlotFile3D)
X-mailer: Pegasus Mail for Win32 (v3.11)
Reply-To: djgpp-workers AT delorie DOT com

Hi!

I tested gcc-2.95 prerelease (19990608) built for DJGPP (i586-pc-
msdosdjgpp) and found following problem when compiling tests of 
libg++-2.8.1.3. I got unresolved references from PlotFile3D.o:

--------------------------------------------
/Devel/build/egcs-19990608/build.djg/gcc/xgcc -B/Devel/build/egcs-
19990608/build.djg/gcc/ -Bd:/djgpp/i586-pc-msdosdjgpp/bin/ -c -O2 
-nostdinc++ -I. -I../../../libio -I../../../../../libgpp/etc/PlotFile3D -
I../../../../../libgpp/etc/PlotFile3D/../../../libio -
I../../../../../libgpp/etc/PlotFile3D/..
/../../libstdcxx -I../../../../../libgpp/etc/PlotFile3D/../../src    
../../../../../libgpp/etc/PlotFile3D/PlotFile3D.cc
/../../libstdcxx -I../../../../../libgpp/etc/PlotFile3D/../../src    
../../../../../libgpp/etc/PlotFile3D/tPlotFile3D.cc
/Devel/build/egcs-19990608/build.djg/gcc/xgcc -B/Devel/build/egcs-
19990608/build.djg/gcc/ -Bd:/djgpp/i586-pc-msdosdjgpp/bin/ -O2 
tPlotFile3D.o PlotFile3D.o -L./../../ -L./../../../libstdcxx -lgpp -
lstdcxx -lm -o tPlotFile3D
tPlotFile3D.o(.text+0x245):tPlotFile3D.cc: undefined reference to 
`PlotFile3D::ios virtual table'
PlotFile3D.o(.text+0x301):PlotFile3D.cc: undefined reference to 
`PlotFile3D::ios virtual table'
PlotFile3D.o(.text+0x30f):PlotFile3D.cc: undefined reference to 
`PlotFile3D::ios virtual table'
PlotFile3D.o(.text+0x330):PlotFile3D.cc: undefined reference to 
`PlotFile3D::ios virtual table'
collect2: ld returned 1 exit status
make.exe: *** [tPlotFile3D] Error 1
--------------------------------------------

Here is output of 'nm --extern-only PlotFile3D.o | c++filt'

--------------------------------------------
000002f0 T PlotFile3D::~PlotFile3D(void)
         U filebuf::~filebuf(void)
         U ___builtin_delete
         U ___builtin_vec_delete
         U ___builtin_vec_new
         U ___eprintf
         U ___throw
         U PlotFile3D::ios virtual table
         U fstreambase::ios virtual table
         U ios virtual table
         U ostream::ios virtual table
         U PlotFile::ios virtual table
         U ofstream::ios virtual table
00000e28 T PlotFile3D::box(Vec3D const &, Vec3D const &)
00001990 T PlotFile3D::box(double, double, double, double, 
double, double)
00001020 T PlotFile3D::circle(Vec3D const &, Vec3D const &, int)
000019f4 T PlotFile3D::circle(double, double, double, double, 
double, double, int)
00000ca4 T PlotFile3D::cont(Vec3D const &)
00001954 T PlotFile3D::cont(double, double, double)
         U PlotFile::cont(int, int)
         U _cos
0000009c T PlotFile3D::error(char const *) const
000017e4 T PlotFile3D::home(void)
000001c8 T PlotFile3D::initialize(bool, double, double)
         U _lib_error_handler
000009b0 T PlotFile3D::line2D(int, int, int, int)
000008e4 T PlotFile3D::move(Vec3D const &)
00001918 T PlotFile3D::move(double, double, double)
         U PlotFile::move(int, int)
0000090c T PlotFile3D::project(int &, int &, Vec3D const &, Vec3D 
const &, Vec3D const &) const
         U _sin
000003f8 T PlotFile3D::space(Vec3D const &, Vec3D const &)
000018b4 T PlotFile3D::space(double, double, double, double, 
double, double)
         U PlotFile::space(int, int, int, int)
0000180c T PlotFile3D::sphere(Vec3D const &, Vec3D const &, int)
00001a58 T PlotFile3D::sphere(double, double, double, double, 
double, double, int)
         U _sqrt
--------------------------------------------

I also tested that in Linux (i586-pc-linux-gnu, glibc-2.1.1, gcc-2.95 
1990607) the missing symbol is weak:
--------------------------------------------
00000214 T PlotFile3D::~PlotFile3D(void)
         U filebuf::~filebuf(void)
00000000 W ofstream::~ofstream(void)
00001e70 T PlotFile3D::PlotFile3D(int, char const *, bool, double, 
double)
000018b8 T PlotFile3D::PlotFile3D(int, bool, double, double)
00001b90 T PlotFile3D::PlotFile3D(int, int, bool, double, double)
         U fstreambase::fstreambase(int)
         U fstreambase::fstreambase(int, char const *, int, int)
         U fstreambase::fstreambase(int, int)
         U __assert_fail
         U __builtin_delete
         U __builtin_vec_delete
         U __builtin_vec_new
         U __rtti_class
00000000 W PlotFile3D type_info function
         U PlotFile type_info function
         U __throw
00000000 W virtual function thunk (delta:-372) for 
PlotFile3D::~PlotFile3D(void)
00000010 C PlotFile3D type_info node
         U PlotFile type_info node
00000000 W PlotFile3D::ios virtual table
         U fstreambase::ios virtual table
         U ios virtual table
         U ostream::ios virtual table
         U PlotFile::ios virtual table
         U ofstream::ios virtual table
00000cd8 T PlotFile3D::box(Vec3D const &, Vec3D const &)
00001798 T PlotFile3D::box(double, double, double, double, 
double, double)
00000ec0 T PlotFile3D::circle(Vec3D const &, Vec3D const &, int)
000017f8 T PlotFile3D::circle(double, double, double, double, 
double, double, int)
00000b38 T PlotFile3D::cont(Vec3D const &)
0000175c T PlotFile3D::cont(double, double, double)
         U PlotFile::cont(int, int)
00002150 T PlotFile3D::define3D(void)
000022c0 T PlotFile3D::erase(void)
         U PlotFile::erase(void)
00000000 T PlotFile3D::error(char const *) const
00001610 T PlotFile3D::home(void)
000000dc T PlotFile3D::initialize(bool, double, double)
000022e4 T PlotFile3D::label(char const *)
         U PlotFile::label(char const *)
         U lib_error_handler
00000844 T PlotFile3D::line2D(int, int, int, int)
000021a8 T PlotFile3D::line(Vec3D const &, Vec3D const &)
00002204 T PlotFile3D::line(double, double, double, double, 
double, double)
0000230c T PlotFile3D::linemod(char const *)
         U PlotFile::linemod(char const *)
00000100 R margin
00000770 T PlotFile3D::move(Vec3D const &)
00001718 T PlotFile3D::move(double, double, double)
         U PlotFile::move(int, int)
00002178 T PlotFile3D::must_be_valid3D(void)
000021d8 T PlotFile3D::point(Vec3D const &)
00002278 T PlotFile3D::point(double, double, double)
000007a0 T PlotFile3D::project(int &, int &, Vec3D const &, Vec3D 
const &, Vec3D const &) const
000002a8 T PlotFile3D::space(Vec3D const &, Vec3D const &)
000016bc T PlotFile3D::space(double, double, double, double, 
double, double)
         U PlotFile::space(int, int, int, int)
0000163c T PlotFile3D::sphere(Vec3D const &, Vec3D const &, int)
00001858 T PlotFile3D::sphere(double, double, double, double, 
double, double, int)
         U terminate(void)
000000f8 R umaxi
000000f0 R umini
00002164 T PlotFile3D::undefine3D(void)
000000fc R vmaxi
000000f4 R vmini
--------------------------------------------

After that I tested with egcs-1.1.2 built for DJGPP and got the 
same (unresolved reference). Strange as as I remeber I run tests
of egcs-1.1.2 in March and done' remeber anything like.

Also removing #pragma interface and #pragma implementation 
seems to fix the problem

Andris


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019