From: BRAY@wcuvax1.wcu.edu (Jim Bray)
Subject: (libg++2.3/g++2.3.3)Possible bug involving fstream.[Ch]
Organization: GNUs Not Usenet
Distribution: gnu
Date: Thu, 7 Jan 1993 15:00:00 GMT

  The program included at the end of this message, which is supposed
to be a simple test program, compiles as follows:

#g++ fstream.cxx
fstream.cxx:8: warning: return type for `main' changed to integer type
ld: /usr/local/lib/libg++.a(fstream.o): fatal error: symbol
`rdbuf__C11fstreambase` multiply-defined, also in file
/usr/tmp/cca000Fj1.o

  An nm of fstream.o produced in this dir shows:
[7]     |         0|      36|FUNC |GLOB |0    |2      |rdbuf__C11fstreambase
  An nm of /usr/local/libg++/libg++/iostream/fstream.o shows:
[6]     |         0|      14|FUNC |GLOB |0    |2      |rdbuf__C11fstreambase

  I don't know c++, but my examination of
/usr/..../iostream/fstream.[Ch] showed nothing obvious to me.
  I looked at libg++/README and the g++ manpage. We do not have gld on
this system; presumabely the -fno-gnu-binutils flag is set by default.
I looked thru gcc-2.3.3 for collect, as referenced in the g++ manpage:
there is a collect2.c in gcc, but no evidence that gcc ever made or
installed a collect or ld.
  I think perhaps either the g++ manpage is wrong for this system, or
gcc/configure is failing to set the makefile up to install a necessary
binary, or I should just shut up and try to install the thing. I am
hesitant to do the latter while not knowing what is going on. Also, I
suspect that libg++ could not have built at all with a wrong loader.
  I apologise if this is some obvious thing I should know or be doing.
I don't claim to know c++: I'm just trying to get this working.

  I tried libg++/make check. When tried from libg++, it fails with
"arg list too long". When tried from libg++/libg++, it tries to make
iostream/test:
cd test; make check ...
gcc -g -O -nostdinc++ -I. -I../.. -I./.. -I./../stdio
-I./../../g++-include  -c tFile.C
gcc -o tFile tFile.o ../libio.a ../../libg++.a
Undefined                       first referenced
 symbol                             in file
.L_E2513                            tFile.o
.L_E2514                            tFile.o
.L_E2515                            tFile.o
.L_E210                             tFile.o
.L_E211                             tFile.o
  The -g makes multiple labels-bug seems alive and well.

--Jim Bray (bray@wcuvax1.wcu.edu)

(Run Linux, the Official OS of the New World Order :))
(Please Support the League for Programming Freedom, and Boycott ATT
 because of their legal intimidation of BSDI, UCB, and CMU)



elentari:/usr/dbt/cpp_tutor/source/work[1]#cat fstream.cxx
                                           // Chapter 1 - Program 4
//#include "iostream.h"
#include "fstream.h"
//#include "process.h"  // did he screw up? or is he working with old
version?
#include "stdlib.h"

void main()
{
ifstream infile;
ofstream outfile;
ofstream printer;
char filename[20];

   cout << "Enter the desired file to copy ----> ";

   cin >> filename;

   infile.open(filename, ios::nocreate);
   if (!infile) {
      cout << "Input file cannot be opened.\n";
      exit(1);
   }

   outfile.open("copy");
   if (!outfile) {
      cout << "Output file cannot be opened.\n";
      exit(1);
   }

   printer.open("PRN");
   if (!printer) {
      cout << "There is a problem with the printer.\n";
      exit(1);
   }

   cout << "All three files have been opened.\n";

char one_char;

   printer << "This is the beginning of the printed copy.\n\n";

   while (infile.get(one_char)) {
      outfile.put(one_char);
      printer.put(one_char);
   }

 
 
 
   printer << "\n\nThis is the end of the printed copy.\n";

   infile.close();
   outfile.close();
   printer.close();

}



// Result of execution
//
// (The input file is copied to the file named "COPY")
// (The input file is printed on the printer

Newsgroups: gnu.g++.lib.bug