This is the mail archive of the mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [ECOS] why cygwin does not support "iostream.h"?

On Sat, 17 Aug 2002, Igor Pechtchanski wrote:

> On 17 Aug 2002, Gary Thomas wrote:
> > On Sat, 2002-08-17 at 01:03,   亮 wrote:
> > >
> > > hi all,
> > >   my c++ code:
> > >  #include <iostream.h>
> > >   ...
> > >
> > > cout<<value;
> > > ...
> > >
> > > >gcc classtest.cxx -g -o classtest.exe
> > > ld error:
> > >  undefined reference to "cout" and operator "<<"
> > >
> > > how to get iostream's support?
> > >
> >
> > This would be better asked on the CygWin list :-)
> This would be better asked on the GCC list :-p
> I believe this is in the gcc FAQ.  However, it's been asked often enough
> on this list, so here's an answer for the archives:
> gcc uses the file extension to determine the language.  Any extension it
> doesn't recognize is assumed to be a C file.  The default extension for a
> C++ file is ".C".  gcc does not recognize ".cxx", which is used by
> Microsoft compilers, I think.  It is, of course, possible to tell gcc to
> treat a ".cxx" file as a C++ file.  In case you don't want to mess with
> the gcc configuration, use either the "-x c++" option of gcc, or simply
> call g++.
>         Igor

Hmm, I suppose I better correct myself before someone else does...
The default extensions (suffixes) for C++ are ".C", ".cc", ".cpp", and
".cxx".  Any suffix that is not recognized (e.g., ".o" and ".a") is passed
directly to the linker.
However, quoting from the gcc man page:
	Source filename suffixes identify the source language, but which name
	you use for the compiler governs default assumptions:

	gcc	assumes preprocessed (.i) files are C and assumes C
		style linking.
	g++	assumes preprocessed (.i) files are C++ and assumes
		C++ style linking.

Therefore, what happens here is C++-style compilation with C-style
linking.  Using "g++" solves the issue.  Using "gcc -x c++" does not,
since the compilation already recognized the source file as being C++,
it's the linking that's a problem.
      |\      _,,,---,,_
ZZZzz /,`.-'`'    -.  ;-;;,_
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

It took the computational power of three Commodore 64s to fly to the moon.
It takes a 486 to run Windows 95.  Something is wrong here. -- SC sig file

Unsubscribe info:
Bug reporting:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]