home *** CD-ROM | disk | FTP | other *** search
- From charnel!olivea!spool.mu.edu!howland.reston.ans.net!agate!usenet Sat Jul 10 22:35:48 PDT 1993
- Article: 39966 of comp.lang.c++
- Path: charnel!olivea!spool.mu.edu!howland.reston.ans.net!agate!usenet
- From: jbuck@ohm.berkeley.edu (Joe Buck)
- Newsgroups: gnu.g++.help,comp.lang.c++,news.answers,comp.answers
- Subject: FAQ for g++ and libg++, plain text version [Revised 28 Jun 1993]
- Supersedes: <g++FAQ_06_15_1993_texi@ohm.berkeley.edu>
- Followup-To: poster
- Date: 1 Jul 1993 13:00:13 GMT
- Organization: University of California, Berkeley
- Lines: 741
- Approved: news-answers-request@MIT.edu
- Expires: 1 Aug 1993 00:00:00 GMT
- Message-ID: <g++FAQ_07_01_1993_texi@ohm.berkeley.edu>
- NNTP-Posting-Host: ohm.eecs.berkeley.edu
- Xref: charnel gnu.g++.help:3655 comp.lang.c++:39966 news.answers:9957 comp.answers:1181
-
- Archive-name: g++-FAQ/plain
- Last-modified: 28 Jun 1993
- Frequency: bimonthly
-
- [ this is the plain text version, the parent is the texinfo version ]
-
-
- Preface
- *******
-
- This is a list of frequently asked questions (FAQ) for g++ users;
- thanks to all those who sent suggestions for improvements. Thanks to
- Marcus Speh for doing the index.
-
- Many FAQ's, including this one, are available on the archive site
- rtfm.mit.edu, in the directory pub/usenet/news.answers. This FAQ may
- be found in the subdirectory g++-FAQ.
-
- There have been many, many changes since the last version of this
- list, prompted by a major release of gcc. I've fixed this document as
- best I could, but I'm sure it will need some more work. Please send
- fixes, and please be kind.
-
- I'm looking for new questions (*with* answers), better answers, or
- both. One thing that's missing is a section on templates and template
- problems with g++; I'm looking for contributions on this score. You
- can mail comments, suggestions, flames, etc. to jbuck@ohm.berkeley.edu.
- Please don't assume, though, that because my name is on this thing
- that I am the world expert on g++/C++ and you should mail all your
- tricky questions to me. I'd like to be helpful but I'm getting more of
- this than I can deal with lately.
-
- This FAQ is intended to supplement, not replace, Marshall Cline's
- excellent FAQ for comp.lang.c++. Especially if g++ is the first C++
- compiler you've ever used, the question "How do I do <X> with g++?" is
- probably really "How do I do <X> in C++?". You can obtain the C++ FAQ
- by anonymous FTP from sun.soe.clarkson.edu [128.153.12.3], in the file
- ~ftp/pub/C++/FAQ. (There is also a mail server for that FAQ, but it
- seems to be broken).
-
-
- Obtaining Source Code
- *********************
-
-
- How do I get a copy of g++ for Unix?
- ====================================
-
- First, you may already have it if you have gcc for your platform;
- g++ and gcc are combined now (as of gcc version 2.0).
-
- You can get g++ from a friend who has a copy, by anonymous FTP or
- UUCP, or by ordering a tape or CD-ROM from the Free Software Foundation.
-
- The Free Software Foundation is a nonprofit organization that
- distributes software and manuals to raise funds for more GNU
- development. Getting your copy from the FSF contributes directly to
- paying staff to develop GNU software. CD-ROMs cost $100 if an
- individual is buying, or $400 if an organization is buying. Tapes cost
- around $200 depending on media type. I recommend asking for version 2,
- not version 1, of g++.
-
- For more information about ordering from the FSF, contact
- gnu@prep.ai.mit.edu or phone (617) 876-3296.
-
- Here is a list of anonymous FTP archive sites for GNU software.
-
- Japan: ftp.cs.titech.ac.jp, utsun.s.u-tokyo.ac.jp:ftpsync/prep
- Australia: archie.au:gnu
- Europe: src.doc.ic.ac.uk:gnu, ftp.informatik.tu-muenchen.de,
- ftp.informatik.rwth-aachen.de:pub/gnu,
- nic.funet.fi:pub/gnu, ugle.unit.no, isy.liu.se,
- ftp.stacken.kth.se, sunic.sunet.se, ftp.win.tue.nl,
- ftp.diku.dk, ftp.eunet.ch, archive.eu.net
- United States: wuarchive.wustl.edu, ftp.cs.widener.edu,
- uxc.cso.uiuc.edu, col.hp.com, gatekeeper.dec.com:pub/GNU,
- ftp.uu.net:packages/gnu
-
- The "official site" is prep.ai.mit.edu, but your transfer will
- probably go faster if you use one of the above machines.
-
- If you use the HP Precision Architecture (HP-9000/7xx and
- HP-9000/8xx) and you want to use debugging, you'll need to grab a
- special version of GAS from the University of Utah, site
- jaguar.cs.utah.edu. Look in the "/dist" directory for pa-gas-1.36.u5.
- A non-standard debug format is used, since HP considers their debug
- format a trade secret. The GNU debugger, GDB, understands the debug
- format produced by this version of GAS, but not the format produced by
- HP's compilers.
-
- Some enhancements for the HP that haven't been integrated back into
- the official gcc are available from the same site in version
- gcc-2.4.3.u3. The main one seems to be that linking against HPUX
- shared libraries works. Both sources and precompiled binaries are
- available from this site.
-
- libg++-2.3 requires some patches to install correctly on HP-PA
- systems. You may obtain these patches by anonymous FTP from the site
- geod.emr.ca in /pub/hp/libg++-2.3.patches.tar.Z. Other interesting
- notes for HP-PA folks on use of GNU software on this architecture may
- be found in the file "gnu-results-1.6" in the same directory (1.6 may
- be replaced with some later number).
-
- [ I don't know how the above changes with libg++ 2.3.1 - jbuck ]
-
- UUNET customers can get GNU sources from UUNET via UUCP. UUCP-only
- sites can get GNU sources by "anonymous UUCP" from site "osu-cis" at
- Ohio State University. You pay for the long-distance call to OSU; the
- price isn't too bad on weekends at 9600 bps. Send mail to
- uucp@cis.ohio-state.edu or osu-cis!uucp for more information.
-
- OSU lines are often busy. If you're in the USA, and are willing to
- spend more money, you can get sources via UUCP from UUNET using their
- 900 number: 1-900-GOT-SRCS (900 numbers don't work internationally).
- You will be billed $0.50/minute by your phone company.
-
- Don't forget to retrieve libg++ as well!
-
-
- Getting gcc/g++ binaries for Solaris 2.x
- ========================================
-
- "Sun took the C compiler out of Solaris 2.x. Am I stuck?"
-
- No; prep.ai.mit.edu and its mirror sites provide GCC binaries for
- Solaris. As a rule, these binaries are not updated as often as the
- sources are, so if you want the very latest version of gcc/g++, you may
- need to grab and install binaries for an older version and use it to
- bootstrap the latest version from source.
-
- The latest gcc binaries on prep.ai.mit.edu are for version 2.4.0.
-
-
- How do I get a copy of g++ for (some other platform)?
- =====================================================
-
- The standard gcc/g++ distribution includes VMS support. Since the
- FSF people don't use VMS, it's likely to be somewhat less solid than
- the Unix version. Precompiled copies of g++ and libg++ in
- VMS-installable form are available by FTP from mango.rsmas.miami.edu.
-
- DJ Delorie has ported gcc/g++ to MS-DOS; this port is popularly
- known as "DJGPP" (the P's stand for "plus"). It can be found on many
- FTP archive sites; its "home" is on omnigate.clarkson.edu, directory
- ~ftp/pub/msdos/djgpp. Note: omnigate restricts the number of anonymous
- users. The latest version of DJGPP is 1.10, announced on June 1, 1993.
- This version is the first that runs under Windows 3.x. It is a port
- of gcc 2.4.1.
-
- For information on Amiga ports of gcc/g++, retrieve the file
- /pub/gnu/MicrosPorts/Amiga from prep.ai.mit.edu, or write to Markus M.
- Wild <wild@nessie.cs.id.ethz.ch>, who I hope won't be too upset that I
- mentioned his name here.
-
- A port of gcc-2.4.1 to the Atari ST can be found on the site
- "atari.archive.umich.edu", under /atari/Gnustuff/Tos, along with many
- other GNU programs. See the FAQ for the Usenet group
- "comp.sys.atari.st" for more information.
-
- There are two different ports of gcc-2.3.3 (and g++) to OS/2, the
- so-called EMX port, which requires a particular Unix emulator, and a
- port called "gcc/2", which runs native. The latter port uses a rather
- buggy port of the BSD libc. For more information ask around on
- "comp.os.os2.programmer". gcc/2, together with other GNUware for OS/2,
- can be obtained by FTP from
-
- ftp-os2.nmsu.edu (128.123.35.151) in /pub/os2/2_x/unix/gnu
- luga.latrobe.edu.au (131.172.2.2) in /pub/os2/2_x/unix/gnu
-
- The current maintainer of the gcc/2 port is Colin Jensen (Michael
- Johnson did the original port). His address is ljensen@netcom.com.
-
- Eberhard Mattes did the EMX port. His address is
- mattes@azu.informatik.uni-stuttgart.de.
-
- Because the legal policies of Apple threaten the long-term goals of
- FSF, as well as the concept of free software, no support will be lent to
- efforts to port GNU software to Macintosh or other Apple hardware.
-
-
- But I can only find g++-1.42!
- =============================
-
- "I keep hearing people talking about g++ 2.4.5 (or some other number
- starting with 2), but the latest version I can find is g++ 1.42. Where
- is it?"
-
- As of gcc 2.0, C, C++, and Objective-C as well are all combined into
- a single distribution called gcc. If you get gcc you already have g++.
- The standard installation procedure for any gcc version 2 compiler will
- install the C++ compiler as well.
-
- One could argue that we shouldn't even refer to "g++-2.x.y" but it's
- a convention. It means "the C++ compiler included with gcc-2.x.y".
-
-
- What is the latest version of gcc, g++, and libg++?
- ===================================================
-
- The latest "2.x" version of gcc/g++ is 2.4.5, released June 20, 1993.
- The latest version of libg++ is 2.3.1, released May 26, 1993.
-
- For some non-Unix platforms, 2.2.2 may be the latest compiler that
- has been ported. libg++ 2.3 will not compile with gcc-2.2.2; use libg++
- 2.2 instead.
-
- The latest "1.x" version of gcc is 1.42, and the latest "1.x"
- version of g++ is 1.42.0. I recommend against using them except in
- special circumstances.
-
-
- Installation Issues and Problems
- ********************************
-
-
- I can't build g++ 1.x.y with gcc-2.x.y!
- =======================================
-
- "I obtained gcc-2.x.y and g++ 1.x.y and I'm trying to build it, but
- I'm having major problems. What's going on?"
-
- If you wish to build g++-1.42, you must obtain gcc-1.42 first. The
- installation instructions for g++ version 1 leave a lot to be desired,
- unfortunately, and I would recommend that, unless you have a special
- reason for needing the 1.x compiler, that C++ users use the latest
- g++-2.x version, as it is the version that is being actively maintained.
-
- There is no template support in g++-1.x, and it is generally much
- further away from the ANSI draft standard than g++-2.x is.
-
-
- OK, I've obtained gcc; what else do I need?
- ===========================================
-
- First off, you'll want libg++ as you can do almost nothing without it
- (unless you replace it with some other class library).
-
- Second, depending on your platform, you may need "gas", the GNU
- assembler, or the GNU linker (see next question).
-
- Finally, while it is not required, you'll almost certainly want the
- GNU debugger, gdb. The latest version is 4.9, released May 12, 1993.
- Other debuggers (like dbx, for example) will normally not be able to
- understand at least some of the debug information produced by g++.
-
-
- Should I use the GNU linker, or should I use "collect"?
- =======================================================
-
- First off, for novices: special measures must be taken with C++ to
- arrange for the calling of constructors for global or static objects
- before the execution of your program, and for the calling of
- destructors at the end. (Exception: System VR3 and System VR4 linkers
- support user-defined segments; g++ on these systems requires neither
- the GNU linker nor collect. So if you have such a system, the answer
- is that you don't need either one).
-
- If you have experience with AT&T's "cfront", this function is
- performed there by programs named "patch" or "munch". With GNU C++, it
- is performed either by the GNU linker or by a program known as
- "collect". The collect program is part of the gcc-2.x distribution;
- you can obtain the GNU linker separately as part of the "binutils"
- package. The latest version of binutils is 2.2.1, released May 21,
- 1993.
-
- (To be technical, it's "collect2"; there were originally several
- alternative versions of collect, and this is the one that survived).
-
- There are advantages and disadvantages to either choice.
-
- Advantages of the GNU linker:
-
- It's faster than using collect - collect basically runs the standard
- Unix linker on your program twice, inserting some extra code after the
- first pass to call the constructors. This is a sizable time penalty
- for large programs. The GNU linker does not require this extra pass.
-
- GNU ld reports undefined symbols using their true names, not the
- mangled names.
-
- If there are undefined symbols, GNU ld reports which object file(s)
- refer to the undefined symbol(s).
-
- As of binutils version 2.2, on systems that use the so-called "a.out"
- debug format (e.g. Suns running SunOS 4.x), the GNU linker compresses
- the debug symbol table considerably, which in at least some cases may
- make up, in disk space, for its inability to use shared libraries.
-
- Advantages of collect:
-
- If your native linker supports shared libraries, you can use shared
- libraries with collect. The GNU linker does not (yet) support shared
- libraries.
-
- Note: using existing shared libraries (X and libc, for example) works
- very nicely; generating shared libraries from g++-compiled code is
- another matter, generally requiring OS-dependent tricks if it is
- possible at all.
-
- The GNU linker has not been ported to as many platforms as g++ has,
- so you may be forced to use collect.
-
- If you use collect, you don't need to get something extra and figure
- out how to install it; the standard gcc installation procedure will do
- it for you.
-
- In conclusion, I don't see a clear win for either alternative at this
- point. Take your pick.
-
-
- Should I use the GNU assembler, or my vendor's assembler?
- =========================================================
-
- This depends on your platform and your decision about the GNU
- linker. For most platforms, you'll need to use gas if you use the GNU
- linker. For some platforms, you have no choice; check the gcc
- installation notes to see whether you must use gas. But you can
- usually use the vendor's assembler if you don't use the GNU linker.
-
- The GNU assembler assembles faster than many native assemblers;
- however, on many platforms it cannot support the local debugging format.
-
-
- Should I use the GNU C library?
- ===============================
-
- At this point in time, no. The GNU C library is still very young,
- and libg++ still conflicts with it in some places. Use your native C
- library unless you know a lot about the gory details of libg++ and
- gnu-libc. This will probably change in the future.
-
-
- Problems building libg++ on 386/486
- ===================================
-
- Attempts to install libg++ on 386 or 486 systems running ports of
- SVR4 have problems because of bugs in debugging support on that
- platform. Briefly, debugging does not currently work right yet for
- C++. You should be able to build the library successfully by deleting
- the -g flag from the Makefiles (this should no longer be necessary with
- gcc 2.4.x although debugging still doesn't work).
-
- See the section entitled "Debugging on SVR4 systems."
-
-
- Other problems building libg++
- ==============================
-
- "I am having trouble building libg++-2.2 or 2.3. Help!"
-
- On some platforms (for example, Ultrix), you may see errors
- complaining about being unable to open dummy.o. On other platforms
- (for example, SunOS), you may see problems having to do with the type
- of size_t. The fix for these problems is to make libg++ by saying
- "make CC=gcc". According to Per Bothner, it should no longer be
- necessary to specify "CC=gcc" for libg++-2.3.1.
-
- On Solaris 2.1, in the file `libg++/configure.in', change
-
- *-*-solaris2) my_host=solaris2 ;;
-
- to:
-
- *-*-solaris2*) my_host=solaris2 ;;
-
-
- Do I need to rebuild libg++ to go with my new g++?
- ==================================================
-
- "After I upgraded g++ to the latest version, I'm seeing undefined
- symbols."
-
- or
-
- "If I upgrade to a new version of g++, do I need to reinstall
- libg++?"
-
- This depends; as a rule, some upgrades will require rebuilding libg++
- and others will not. Both versions 2.3.3 and 2.4.0 introduced some
- incompatibilities with previous versions. For 2.3.3, the name mangling
- of certain virtual table names changed, which introduced an
- incompatiblity. For 2.4.0, the type of "size_t" changed on Suns from
- int (as declared by the include files provided by Sun) to unsigned long
- (the ANSI C and draft ANSI C++ standards declare that size_t must be
- unsigned, and the GCC maintainers are now correcting this "bug").
-
- Conclusion: if your old compiler is an older version than 2.3.3, you
- must rebuild libg++ when you install a new g++. If your vendor declares
- size_t to be a signed type and your old compiler is an older version
- than 2.4.0, you also must rebuild libg++.
-
- This would be a good opportunity to upgrade to the libg++ 2.3.1
- release if you haven't yet, to minimize the amount of rebuilding.
-
-
- User Problems
- *************
-
-
- Linker reports undefined symbols for static data members
- ========================================================
-
- "g++ reports undefined symbols for all my static data members when I
- link, even though the program works correctly for compiler XYZ. What's
- going on?"
-
- The problem is almost certainly that you don't give definitions for
- your static data members. If you have
-
- class Foo {
- ...
- void method();
- static int bar;
- };
-
- you have only declared that there is an int named Foo::bar and a
- member function named Foo::method that is defined somewhere. You still
- need to defined BOTH method() and bar in some source file. According
- to the draft ANSI standard, you must supply an initializer, such as
-
- int Foo::bar = 0;
-
- in one (and only one) source file.
-
-
- g++ won't accept the placement new syntax.
- ==========================================
-
- "I have a program that uses the "placement syntax" of operator new,
- e.g.
-
- new (somewhere) T;
-
- and g++ won't accept it."
-
- Up until version 2.3.1, g++ accepted an alternate form of the
- placement syntax, for historical reasons; use
-
- new {somewhere} T;
-
- if you are using g++-2.2.2 or older.
-
- As of 2.3.1, g++ finally fixed this, using the standard ARM syntax
- for "placement new". A few remaining glitches were fixed in 2.3.2. The
- only remaining problem is with declarators for pointers to functions;
-
- new (void (*)(int)); // confuses gcc 2.3.2
- new (a) (void (*)(int)); // ditto
-
- These can be worked around with a typedef:
-
- typedef void (*fun)(int);
- new fun;
- new (a) fun;
-
-
- I think I have found a bug in g++.
- ==================================
-
- "I think I have found a bug in g++, but I'm not sure. How do I know,
- and who should I tell?"
-
- First, see the excellent section on bugs and bug reports in the gcc
- manual (which is included in the gcc distribution). As a short summary
- of that section: if the compiler gets a fatal signal, for any input,
- it's a bug (newer versions of g++ will ask you to send in a bug report
- when they detect an error in themselves). Same thing for producing
- invalid assembly code.
-
- When you report a bug, make sure to describe your platform (the type
- of computer, and the version of the operating system it is running) and
- the version of the compiler that you are running. Also provide enough
- code so that the g++ maintainers can duplicate your bug.
-
- I will add some extra notes that are C++-specific, since the notes
- from gcc are generally C-specific.
-
- First, mail your bug report to "bug-g++@prep.ai.mit.edu". You may
- also post to gnu.g++.bug, but it's better to use mail, particularly if
- you have any doubt as to whether your news software generates correct
- reply addresses. Don't mail C++ bugs to bug-gcc@prep.ai.mit.edu.
-
- If your bug involves libg++ rather than the compiler, mail to
- bug-libg++@prep.ai.mit.edu. If you're not sure, you could send your bug
- to both lists.
-
- Second, if your program does one thing, and you think it should do
- something else, it is best to consult a good reference if in doubt. The
- standard reference is "The Annotated C++ Reference Manual", by Ellis and
- Stroustrup (copyright 1990, ISBN #0-201-51459-1). This is what they're
- talking about on the net when they refer to "the ARM".
-
- The reference manual, without annotations, also appears in
- Stroustrup's "The C++ Programming Language, Second Edition" (copyright
- 1991, ISBN #0-201-53992-6). Both books are published by Addison-Wesley.
-
- Note that the behavior of (any version of) AT&T's "cfront" compiler
- is NOT the standard for the language.
-
-
- Porting programs from other compilers to g++
- ============================================
-
- "I have a program that runs on <some other C++ compiler>, and I want
- to get it running under g++. Is there anything I should watch out for?"
-
- First, see the questions on placement new syntax and static data
- members.
-
- There are two other reasons why a program that worked under one
- compiler might fail under another: your program may depend on the order
- of evaluation of side effects in an expression, or it may depend on the
- lifetime of a temporary (you may be assuming that a temporary object
- "lives" longer than the standard guarantees). As an example of the
- first:
-
- void func(int,int);
-
- int i = 3;
- func(i++,i++);
-
- Novice programmers think that the increments will be evaluated in
- strict left-to-right order. Neither C nor C++ guarantees this; the
- second increment might happen first, for example. func might get 3,4,
- or it might get 4,3.
-
- The second problem often happens with classes like the libg++ String
- class. Let's say I have
-
- String func1();
- void func2(const char*);
-
- and I say
-
- func2(func1());
-
- because I know that class String has an "operator const char*". So
- what really happens is
-
- func2(func1().convert());
-
- where I'm pretending I have a convert() method that is the same as
- the cast. This is unsafe, because the temporary String object may be
- deleted after its last use (the call to the conversion function),
- leaving the pointer pointing to garbage, so by the time func2 is
- called, it gets an invalid argument.
-
- If you think this is ugly, you should know that the ANSI C++
- committee is still debating the lifetime-of-temporaries problem.
-
- For now, the safe way to write such code is to give the temporary a
- name, which forces it to live until the end of the scope of the name.
- For example:
-
- String& tmp = func1();
- func2(tmp);
-
- Finally, like all compilers (but especially C++ compilers, it seems),
- g++ has bugs, and you may have tweaked one.
-
-
- Why does g++ mangle names differently from other C++ compilers?
- ===============================================================
-
- See the answer to the next question.
-
-
- Why can't g++ code link with code from other C++ compilers?
- ===========================================================
-
- "Why can't I link g++-compiled programs against libraries compiled by
- some other C++ compiler?"
-
- Some people think that, if only the FSF and Cygnus Support folks
- would stop being stubborn and mangle names the same way that, say,
- cfront does, then any g++-compiled program would link successfully
- against any cfront-compiled library and vice versa. Name mangling is
- the least of the problems. Compilers differ as to how objects are laid
- out, how multiple inheritance is implemented, how virtual function
- calls are handled, and so on, so if the name mangling were made the
- same, your programs would link against libraries provided from other
- compilers but then crash when run. For this reason, the ARM
- *encourages* compiler writers to make their name mangling different
- from that of other compilers for the same platform. Incompatible
- libraries are then detected at link time, rather than at run time.
-
-
- What documentation exists for g++ 2.x?
- ======================================
-
- Relatively little. The gcc manual describes the C front end, and
- also the back end, which is shared by the C++ compiler, but there is
- relatively little documentation for the C++ front end beyond a cursory
- description of the command line options (although more C++ specific
- information has been added to the gcc manual as of version 2.4.1).
-
- There is a Unix-style manual entry, "g++.1", in the gcc-2.x
- distribution; this describes the extra command-line options that g++
- supports, and the #pragma interface and #pragma implementation
- directives.
-
- (Latest news: as of 2.4.0, these pragmas are finally described in the
- main gcc manual).
-
- A draft of a document describing the g++ internals appears in the gcc
- distribution (called g++int.texi); it is still incomplete.
-
-
- What are the differences between g++ and the ARM specification of C++?
- ======================================================================
-
- The chief thing missing from g++ that is in the ARM is exceptions.
- There are bits and pieces of exception code present, but it is not
- presently usable.
-
- The template implementation is still new. The implementation in
- 2.4.1 represents a considerable improvement over that of previous
- releases, but it has a long way to go.
-
- g++ does not implement a separate pass to instantiate template
- functions and classes at this point; for this reason, it will not work,
- for the most part, to declare your template functions in one file and
- define them in another. The compiler will need to see the entire
- definition of the function, and will generate a static copy of the
- function in each file in which it is used.
-
- As with any beta-test compiler, there are bugs. You can help improve
- the compiler by submitting detailed bug reports.
-
- One of the weakest areas of g++ other than templates is the
- resolution of overloaded functions and operators in complex cases. The
- usual symptom is that in a case where the ARM says that it is ambiguous
- which function should be chosen, g++ chooses one (often the first one
- declared). This is usually not a problem when porting C++ code from
- other compilers to g++, but shows up as errors when code developed under
- g++ is ported to other compilers.
-
- [A full bug list would be very long indeed, so I won't put one here.
- I may add a list of frequently-reported bugs and "non-bugs" like the
- static class members issue mentioned above].
-
-
- Will g++ compile InterViews? The NIH class library?
- ====================================================
-
- The NIH class library uses a non-portable, compiler-dependent hack
- to initialize itself, which makes life difficult for g++ users. It
- will not work without modification, and I don't know what modifications
- are required or whether anyone has done them successfully.
-
- Brendan Kehoe of Cygnus Support is working on getting NIHCL to build
- with g++. He says, "The NIHCL release will hopefully contain patches
- to gcc to let it build."
-
- [ From Steinar Bang <steinarb@idt.unit.no>]
-
- InterViews 3.1 compiles and runs with gcc-2.3.3 and libg++-2.3,
- except that the "doc" application immediately dumps core when you try
- to run it. There is also a small glitch with idraw.
-
- There is a patch for InterViews 3.1 from Johan Garpendahl
- <garp@isy.liu.se> available for FTP from site "ugle.unit.no". It is in
- the file
-
- /pub/X11/contrib/InterViews/g++/3.1-beta3-patch.
-
- This fixes two things: the Doc coredump, and the pattern menu of
- idraw. Read the instructions at the start of the file.
-
- [ I don't know whether the situation has changed with 2.4.0 ]
-
-
- Debugging on SVR4 systems
- =========================
-
- "When I use the -g flag on C++ code on a System V Release 4 system,
- I get lots of undefined symbols at link time. Why? Help!"
-
- [From Ron Guilmette:] The changes needed to get the g++ front-end to
- generate proper DWARF style debugging information for System V Release
- 4 are not yet completed, nor will they be until g++ version 2.4 (at the
- earliest).
-
- (Guess what? 2.4 is out, and it *still* doesn't work, but now g++
- will give you a warning message and turn off debugging rather than put
- out bogus assembly code. Latest word from Brendan Kehoe: "it should
- work [better] in whatever major release comes after 2.4.1 ...").
-
- [Ron again:] There is nothing that you (as an end-user) can do to
- correct this problem. (It is actually *many* problems, and they are
- all very complex.) Until the g++ maintainers have time to fix this,
- you should simply *avoid* using the -g option when using g++ on SVR4.
-
-
- What are the rules for shipping code built with g++ and libg++?
- ***************************************************************
-
- "Is it is possible to distribute programs for profit that are created
- with g++ and use the g++ libraries?"
-
- I am not a lawyer, and this is not legal advice. In any case, I have
- little interest in telling people how to violate the spirit of the GNU
- licenses without violating the letter. This section tells you how to
- comply with the intention of the GNU licenses as best I understand them.
-
- The FSF has no objection to your making money. Its only interest is
- that source code to their programs, and libraries, and to modified
- versions of their programs and libraries, is always available.
-
- The short answer is that you do not need to release the source to
- your program, but you can't just ship a stripped executable either.
-
- Compiling your code with a GNU compiler does not affect its
- copyright; it is still yours. However, in order to ship code that
- links in a GNU library such as libg++ there are certain rules you must
- follow. The rules are described in the file COPYING.LIB that
- accompanies gcc distributions; it is also included in the libg++
- distribution. See that file for the exact rules. The agreement is
- called the Library GNU Public License or LGPL. It is much "looser"
- than the GNU Public License, or GPL, that covers must GNU programs.
-
- Here's the deal: let's say that you use some version of libg++,
- completely unchanged, in your software, and you want to ship only a
- binary form of your code. You can do this, but there are several
- special requirements. If you want to use libg++ but ship only object
- code for your code, you have to ship source for libg++ (or ensure
- somehow that your customer already has the source for the exact version
- you are using), and ship your application in linkable form. You cannot
- forbid your customer from reverse-engineering or extending your program
- by exploiting its linkable form.
-
- Furthermore, if you modify libg++ itself, you must provide source
- for your modifications (making a derived class does not count as
- modifying the library - that is "a work that uses the library").
-
-
- Concept Index
- *************
-
- --
- Joe Buck jbuck@ohm.EECS.Berkeley.EDU
-
-
- From charnel!olivea!spool.mu.edu!agate!usenet Sat Jul 10 22:36:01 PDT 1993
- Article: 39965 of comp.lang.c++
- Path: charnel!olivea!spool.mu.edu!agate!usenet
- From: jbuck@ohm.berkeley.edu (Joe Buck)
- Newsgroups: gnu.g++.help,comp.lang.c++,news.answers,comp.answers
- Subject: FAQ for g++ and libg++, texinfo version [Revised 28 Jun 1993]
- Supersedes: <g++FAQ_06_15_1993_plain@ohm.berkeley.edu>
- Followup-To: poster
- Date: 1 Jul 1993 13:00:07 GMT
- Organization: University of California, Berkeley
- Lines: 972
- Approved: news-answers-request@MIT.edu
- Expires: 1 Aug 1993 00:00:00 GMT
- Message-ID: <g++FAQ_07_01_1993_plain@ohm.berkeley.edu>
- References: <g++FAQ_07_01_1993_texi@ohm.berkeley.edu>
- NNTP-Posting-Host: ohm.eecs.berkeley.edu
- Xref: charnel gnu.g++.help:3654 comp.lang.c++:39965 news.answers:9956 comp.answers:1180
-
- Archive-name: g++-FAQ/texi
- Last-modified: 28 Jun 1993
- Frequency: bimonthly
-
- [ This is the texinfo version. If you don't know what texinfo is,
- then you probably want to use the companion plain-text version. ]
-
- ------------- cut here ----------------------------------------------
- \input texinfo.tex @c -*-texinfo-*-
- @c %**start of header
- @setfilename g++FAQ.info
- @settitle Frequently asked questions about the GNU C++ compiler
- @setchapternewpage off
- @c version: @(#)g++FAQ.texi 1.8 6/28/93
- @c %**end of header
-
- @iftex
- @finalout
- @end iftex
- @titlepage
- @title G++ FAQ
- @subtitle Frequently asked questions about the GNU C++ compiler
- @subtitle Jun 28, 1993
- @sp 1
- @author Joe Buck
- @page
- @end titlepage
-
- @ifinfo
- @node Top, getting g++, (dir), (dir)
- @top
- @unnumbered Preface
- @cindex FAQ for g++, latest version
- @cindex Archive site for FAQ lists
- @cindex rtfm.mit.edu
- @cindex Joe Buck <jbuck@@ohm.berkeley.edu>
- @cindex FAQ for C++
- @cindex Marshall Cline [FAQ for comp.lang.c++]
- @cindex /anonymous@@sun.soe.clarkson.edu:/ftp/pub/C++/FAQ
- @end ifinfo
-
- This is a list of frequently asked questions (FAQ) for g++ users; thanks to
- all those who sent suggestions for improvements. Thanks to Marcus Speh
- for doing the index.
-
- Many FAQ's, including this one, are available on the archive site
- rtfm.mit.edu, in the directory pub/usenet/news.answers.
- This FAQ may be found in the subdirectory g++-FAQ.
-
- There have been many, many changes since the last version of this list,
- prompted by a major release of gcc. I've fixed this document as best
- I could, but I'm sure it will need some more work. Please send fixes,
- and please be kind.
-
- I'm looking for new questions (@emph{with} answers), better answers,
- or both. One thing that's
- missing is a section on templates and template problems with g++; I'm
- looking for contributions on this score. You can mail comments,
- suggestions, flames, etc. to jbuck@@ohm.berkeley.edu. Please don't
- assume, though, that because my name is on this thing that I am the
- world expert on g++/C++ and you should mail all your tricky questions to
- me. I'd like to be helpful but I'm getting more of this than I can
- deal with lately.
-
- This FAQ is intended to supplement, not replace, Marshall Cline's
- excellent FAQ for comp.lang.c++. Especially if g++ is the first C++
- compiler you've ever used, the question "How do I do <X> with g++?"
- is probably really "How do I do <X> in C++?". You can obtain the
- C++ FAQ by anonymous FTP from sun.soe.clarkson.edu [128.153.12.3],
- in the file ~ftp/pub/C++/FAQ. (There is also a mail server for that
- FAQ, but it seems to be broken).
-
- @menu
- * getting g++:: Obtaining Source Code
- * installation:: Installation Issues and Problems
- * User Problems:: User Problems
- * legalities:: What are the rules for shipping code built with g++ and libg++?
- * index:: Concept Index
-
- --- The Detailed Node Listing ---
-
- Obtaining Source Code
-
- * g++ for Unix:: How do I get a copy of g++ for Unix?
- * g++ for Solaris 2.x::
- * g++ for other platforms:: How do I get a copy of g++ for (some other platform)?
- * 1.x vs 2.x versions:: But I can only find g++-1.42!
- * latest versions:: What is the latest version of gcc, g++, and libg++?
-
- Installation Issues and Problems
-
- * gcc-2 + g++-1:: I can't build g++ 1.x.y with gcc-2.x.y!
- * what else do I need?:: OK, I've obtained gcc; what else do I need?
- * use GNU linker?:: Should I use the GNU linker, or should I use "collect"?
- * Use GNU assembler?:: Should I use the GNU assembler, or my vendor's assembler?
- * Use GNU C library?:: Should I use the GNU C library?
- * Problems building libg++ on 386/486::
- * Other problems building libg++::
- * Rebuild libg++?:: Do I need to rebuild libg++ to go with my new g++?
-
- User Problems
-
- * static data members:: Linker reports undefined symbols for static data members
- * placement new syntax:: g++ won't accept the placement new syntax.
- * bug reports:: I think I have found a bug in g++.
- * porting to g++:: Porting programs from other compilers to g++
- * name mangling:: Why does g++ mangle names differently from other C++ compilers?
- * problems linking with other libraries:: Why can't g++ code link with code from other C++ compilers?
- * documentation:: What documentation exists for g++ 2.x?
- * agreement with standards:: What are the differences between g++ and the ARM specification of C++?
- * compiling standard libraries:: Will g++ compile InterViews? The NIH class library?
- * debugging on SVR4 systems:: Debugging on SVR4 systems
- @end menu
-
- @node getting g++, installation, Top, Top
- @chapter Obtaining Source Code
- @cindex Source code
-
- @menu
- * g++ for Unix:: How do I get a copy of g++ for Unix?
- * g++ for Solaris 2.x::
- * g++ for other platforms:: How do I get a copy of g++ for (some other platform)?
- * 1.x vs 2.x versions:: But I can only find g++-1.42!
- * latest versions:: What is the latest version of gcc, g++, and libg++?
- @end menu
-
- @node g++ for Unix, g++ for Solaris 2.x, , getting g++
- @section How do I get a copy of g++ for Unix?
-
- First, you may already have it if you have gcc for your platform;
- g++ and gcc are combined now (as of gcc version 2.0).
- @cindex GNU gcc, version
- @cindex GNU g++ and gcc
-
- You can get g++ from a friend who has a copy, by anonymous FTP or
- UUCP, or by ordering a tape or CD-ROM from the Free Software
- Foundation.
- @cindex g++, ordering
- @cindex g++, getting a copy
-
- The Free Software Foundation is a nonprofit organization that
- distributes software and manuals to raise funds for more GNU
- development. Getting your copy from the FSF contributes directly to
- paying staff to develop GNU software. CD-ROMs cost $100 if an
- individual is buying, or $400 if an organization is buying. Tapes
- cost around $200 depending on media type. I recommend asking for
- version 2, not version 1, of g++.
- @cindex FSF [Free Software Foundation]
- @cindex GNU [GNU's not unix]
-
- For more information about ordering from the FSF, contact
- gnu@@prep.ai.mit.edu or phone (617) 876-3296.
- @cindex FSF, contact <gnu@@prep.ai.mit.edu>
-
- Here is a list of anonymous FTP archive sites for GNU software.
- @cindex GNUware, anonymous FTP sites
-
- @example
- Japan: ftp.cs.titech.ac.jp, utsun.s.u-tokyo.ac.jp:ftpsync/prep
- Australia: archie.au:gnu
- Europe: src.doc.ic.ac.uk:gnu, ftp.informatik.tu-muenchen.de,
- ftp.informatik.rwth-aachen.de:pub/gnu,
- nic.funet.fi:pub/gnu, ugle.unit.no, isy.liu.se,
- ftp.stacken.kth.se, sunic.sunet.se, ftp.win.tue.nl,
- ftp.diku.dk, ftp.eunet.ch, archive.eu.net
- United States: wuarchive.wustl.edu, ftp.cs.widener.edu,
- uxc.cso.uiuc.edu, col.hp.com, gatekeeper.dec.com:pub/GNU,
- ftp.uu.net:packages/gnu
- @end example
-
- The "official site" is prep.ai.mit.edu, but your transfer will probably
- go faster if you use one of the above machines.
-
- @cindex HP Precision Architecture
- @cindex Hewlett-Packard
- @cindex GNU gas
- @cindex GNU gdb
- @cindex gcc-2.4.3.u3 [Utah version]
- @cindex gcc, patches added
-
- If you use the HP Precision Architecture (HP-9000/7xx and HP-9000/8xx)
- and you want to use debugging, you'll need to grab a special version of
- GAS from the University of Utah, site jaguar.cs.utah.edu. Look in the
- "/dist" directory for pa-gas-1.36.u5. A non-standard debug format is
- used, since HP considers their debug format a trade secret. The GNU
- debugger, GDB, understands the debug format produced by this version of
- GAS, but not the format produced by HP's compilers.
-
- Some enhancements for the HP that haven't been integrated back into the
- official gcc are available from the same site in version gcc-2.4.3.u3.
- The main one seems to be that linking against HPUX shared libraries
- works. Both
- sources and precompiled binaries are available from this site.
-
- libg++-2.3 requires some patches to install correctly on HP-PA systems.
- You may obtain these patches by anonymous FTP from the site geod.emr.ca
- in /pub/hp/libg++-2.3.patches.tar.Z. Other interesting notes for HP-PA
- folks on use of GNU software on this architecture may be found in the file
- "gnu-results-1.6" in the same directory (1.6 may be replaced with some
- later number).
-
- [ I don't know how the above changes with libg++ 2.3.1 - jbuck ]
-
- @cindex UUNET
- @cindex UUCP
- UUNET customers can get GNU sources from UUNET via UUCP.
- UUCP-only sites can get GNU sources by "anonymous UUCP" from site
- "osu-cis" at Ohio State University. You pay for the long-distance call
- to OSU; the price isn't too bad on weekends at 9600 bps. Send mail to
- uucp@@cis.ohio-state.edu or osu-cis!uucp for more information.
-
- OSU lines are often busy. If you're in the USA, and are willing to spend
- more money, you can get sources via UUCP from UUNET using their 900 number:
- 1-900-GOT-SRCS (900 numbers don't work internationally). You will be
- billed $0.50/minute by your phone company.
-
- @cindex libg++
- Don't forget to retrieve libg++ as well!
-
- @node g++ for Solaris 2.x, g++ for other platforms, g++ for Unix, getting g++
- @section Getting gcc/g++ binaries for Solaris 2.x
-
- ``Sun took the C compiler out of Solaris 2.x. Am I stuck?''
-
- @cindex Solaris
- @cindex gcc/g++ binaries for Solaris
-
- No; prep.ai.mit.edu and its mirror sites provide GCC binaries for
- Solaris. As a rule, these binaries are not updated as often as the
- sources are, so if you want the very latest version of gcc/g++, you
- may need to grab and install binaries for an older version and use it to
- bootstrap the latest version from source.
-
- The latest gcc binaries on prep.ai.mit.edu are for version 2.4.0.
-
- @node g++ for other platforms, 1.x vs 2.x versions, g++ for Solaris 2.x, getting g++
- @section How do I get a copy of g++ for (some other platform)?
-
- @cindex VMS support
- @cindex VAX
- @cindex VMS, g++/libg++ precompiled
- The standard gcc/g++ distribution includes VMS support. Since the
- FSF people don't use VMS, it's likely to be somewhat less solid than
- the Unix version. Precompiled copies of g++ and libg++ in VMS-installable
- form are available by FTP from mango.rsmas.miami.edu.
-
- @cindex MS-DOS support
- @cindex Delorie's gcc/g++
- @cindex DJGPP
- DJ Delorie has ported gcc/g++ to MS-DOS; this port is popularly known as
- "DJGPP" (the P's stand for "plus"). It can be found on many FTP archive
- sites; its "home" is on omnigate.clarkson.edu, directory
- ~ftp/pub/msdos/djgpp. Note: omnigate restricts the number of anonymous
- users.
- The latest version of DJGPP is 1.10, announced on June 1, 1993. This
- version is the first that runs under Windows 3.x. It is a port of gcc 2.4.1.
-
- @cindex Amiga support
- For information on Amiga ports of gcc/g++, retrieve the file
- /pub/gnu/MicrosPorts/Amiga from prep.ai.mit.edu, or write
- to Markus M. Wild <wild@@nessie.cs.id.ethz.ch>, who I hope won't be too upset
- that I mentioned his name here.
-
- @cindex Atari ST support
- A port of gcc-2.4.1 to the Atari ST can be found on the site
- ``atari.archive.umich.edu'', under /atari/Gnustuff/Tos, along with many
- other GNU programs. See the FAQ for the Usenet group
- ``comp.sys.atari.st'' for more information.
-
- @cindex EMX port
- @cindex gcc/2
- @cindex OS/2 support
- @cindex g++, version 2.3.3
- There are two different ports of gcc-2.3.3 (and g++) to OS/2, the
- so-called EMX port, which requires a particular Unix emulator, and
- a port called ``gcc/2'', which runs native. The latter port uses
- a rather buggy port of the BSD libc. For more information ask
- around on ``comp.os.os2.programmer''. gcc/2, together with other
- GNUware for OS/2, can be obtained by FTP from
-
- @example
- ftp-os2.nmsu.edu (128.123.35.151) in /pub/os2/2_x/unix/gnu
- luga.latrobe.edu.au (131.172.2.2) in /pub/os2/2_x/unix/gnu
- @end example
-
- The current maintainer of the gcc/2 port is Colin Jensen (Michael Johnson
- did the original port). His address is ljensen@@netcom.com.
-
- Eberhard Mattes did the EMX port. His address is
- mattes@@azu.informatik.uni-stuttgart.de.
-
- @cindex Apple support
- @cindex Macintosh support
- Because the legal policies of Apple threaten the long-term goals of FSF,
- as well as the concept of free software, no support will be lent to
- efforts to port GNU software to Macintosh or other Apple hardware.
-
- @node 1.x vs 2.x versions, latest versions, g++ for other platforms, getting g++
- @section But I can only find g++-1.42!
-
- ``I keep hearing people talking about g++ 2.4.5 (or some other number
- starting with 2), but the latest version I can find is g++ 1.42.
- Where is it?''
-
- @cindex Objective-C
- @cindex g++, version number
- As of gcc 2.0, C, C++, and Objective-C as well are all combined into a
- single distribution called gcc. If you get gcc you already have g++. The
- standard installation procedure for any gcc version 2 compiler will
- install the C++ compiler as well.
-
- One could argue that we shouldn't even refer to "g++-2.x.y" but it's a
- convention. It means "the C++ compiler included with gcc-2.x.y".
-
- @node latest versions, , 1.x vs 2.x versions, getting g++
- @section What is the latest version of gcc, g++, and libg++?
-
- @cindex gcc/g++, version date
- The latest "2.x" version of gcc/g++ is 2.4.5, released June 20, 1993.
- The latest version of libg++ is 2.3.1, released May 26, 1993.
-
- For some non-Unix platforms, 2.2.2 may be the latest compiler that
- has been ported. libg++ 2.3 will not compile with gcc-2.2.2; use libg++
- 2.2 instead.
-
- The latest "1.x" version of gcc is 1.42, and the latest "1.x" version of
- g++ is 1.42.0.
- I recommend against using them except in special circumstances.
-
- @node installation, User Problems, getting g++, Top
- @chapter Installation Issues and Problems
-
- @menu
- * gcc-2 + g++-1:: I can't build g++ 1.x.y with gcc-2.x.y!
- * what else do I need?:: OK, I've obtained gcc; what else do I need?
- * use GNU linker?:: Should I use the GNU linker, or should I use "collect"?
- * Use GNU assembler?:: Should I use the GNU assembler, or my vendor's assembler?
- * Use GNU C library?:: Should I use the GNU C library?
- * Problems building libg++ on 386/486:: Problems building libg++ on 386/486
- * Other problems building libg++:: Other problems building libg++
- * Rebuild libg++?:: Rebuild libg++ to go with my new g++?
- @end menu
-
- @node gcc-2 + g++-1, what else do I need?, , installation
- @section I can't build g++ 1.x.y with gcc-2.x.y!
-
- ``I obtained gcc-2.x.y and g++ 1.x.y and I'm trying to build it, but
- I'm having major problems. What's going on?''
-
- @cindex g++, building
- If you wish to build g++-1.42, you must obtain gcc-1.42 first. The
- installation instructions for g++ version 1 leave a lot to be desired,
- unfortunately, and I would recommend that, unless you have a special
- reason for needing the 1.x compiler, that C++ users use the latest
- g++-2.x version, as it
- is the version that is being actively maintained.
-
- @cindex g++, template support
- @cindex Templates
- @cindex ANSI draft standard
- There is no template support in g++-1.x, and it is generally much further
- away from the ANSI draft standard than g++-2.x is.
-
- @node what else do I need?, use GNU linker?, gcc-2 + g++-1, installation
- @section OK, I've obtained gcc; what else do I need?
-
- @cindex libg++
- First off, you'll want libg++ as you can do almost nothing without it
- (unless you replace it with some other class library).
-
- @cindex GNU gas
- @cindex GNU gas [assembler]
- Second, depending on your platform, you may need "gas", the GNU assembler,
- or the GNU linker (see next question).
-
- @cindex GNU gdb
- Finally, while it is not required, you'll almost certainly want the GNU
- debugger, gdb. The latest version is 4.9, released May 12, 1993. Other
- debuggers (like dbx, for example) will normally not be able to
- understand at least some of the debug information produced by g++.
-
- @node use GNU linker?, Use GNU assembler?, what else do I need?, installation
- @section Should I use the GNU linker, or should I use "collect"?
-
- @cindex Linker
- @cindex System VR3, linker
- @cindex System VR4, linker
- First off, for novices: special measures must be taken with C++ to arrange
- for the calling of constructors for global or static objects before the
- execution of your program, and for the calling of destructors at the end.
- (Exception: System VR3 and System VR4 linkers support user-defined
- segments; g++ on these systems requires neither the GNU linker nor
- collect. So if you have such a system, the answer is that you don't
- need either one).
-
- @cindex AT&T cfront
- @cindex Cfront-end
- @cindex collect program
- @cindex GNU linker
- @cindex GNU binutils
- If you have experience with AT&T's "cfront", this function is performed
- there by programs named "patch" or "munch". With GNU C++, it is performed
- either by the GNU linker or by a program known as "collect". The collect
- program is part of the gcc-2.x distribution; you can obtain the GNU linker
- separately as part of the "binutils" package. The latest version of
- binutils is 2.2.1, released May 21, 1993.
-
- (To be technical, it's "collect2"; there were originally several
- alternative versions of collect, and this is the one that survived).
-
- There are advantages and disadvantages to either choice.
-
- Advantages of the GNU linker:
- @cindex GNU linker, advantages
- @cindex GNU ld
- @cindex ld [GNU linker]
-
- It's faster than using collect -- collect basically runs the standard Unix
- linker on your program twice, inserting some extra code after the first
- pass to call the constructors. This is a sizable time penalty for large
- programs. The GNU linker does not require this extra pass.
-
- GNU ld reports undefined symbols using their true names, not the mangled
- names.
-
- If there are undefined symbols, GNU ld reports which object file(s) refer to
- the undefined symbol(s).
-
- As of binutils version 2.2, on systems that use the so-called "a.out"
- debug format (e.g. Suns running SunOS 4.x), the GNU linker compresses
- the debug symbol table considerably, which in at least some cases may
- make up, in disk space, for its inability to use shared libraries.
-
- @cindex collect linker, advantages
- Advantages of collect:
-
- @cindex Shared libraries
- If your native linker supports shared libraries, you can use shared
- libraries with collect. The GNU linker does not (yet) support shared
- libraries.
-
- Note: using existing shared libraries (X and libc, for example) works
- very nicely; generating shared libraries from g++-compiled code is
- another matter, generally requiring OS-dependent tricks if it is
- possible at all.
-
- @cindex GNU linker, porting
- The GNU linker has not been ported to as many platforms as g++ has, so you
- may be forced to use collect.
-
- If you use collect, you don't need to get something extra and figure out
- how to install it; the standard gcc installation procedure will do it for you.
-
- In conclusion, I don't see a clear win for either alternative at this
- point. Take your pick.
-
- @node Use GNU assembler?, Use GNU C library?, use GNU linker?, installation
- @section Should I use the GNU assembler, or my vendor's assembler?
-
- @cindex Assembler
- @cindex GNU gas
- This depends on your platform and your decision about the GNU linker. For
- most platforms, you'll need to use gas if you use the GNU linker. For
- some platforms, you have no choice; check the gcc installation notes to
- see whether you must use gas. But you can usually use the vendor's
- assembler if you don't use the GNU linker.
-
- The GNU assembler assembles faster than many native assemblers; however,
- on many platforms it cannot support the local debugging format.
-
- @node Use GNU C library?, Problems building libg++ on 386/486, Use GNU assembler?, installation
- @section Should I use the GNU C library?
-
- @cindex GNU C library
- @cindex libg++
- At this point in time, no. The GNU C library is still very young, and
- libg++ still conflicts with it in some places. Use your native C library
- unless you know a lot about the gory details of libg++ and gnu-libc. This
- will probably change in the future.
-
- @node Problems building libg++ on 386/486, Other problems building libg++, Use GNU C library?, installation
- @section Problems building libg++ on 386/486
-
- Attempts to install libg++ on 386 or 486 systems running ports of SVR4
- have problems because of bugs in debugging support on that platform.
- Briefly, debugging does not currently work right yet for C++. You
- should be able to build the library successfully by deleting the -g
- flag from the Makefiles (this should no longer be necessary with gcc
- 2.4.x although debugging still doesn't work).
-
- See the section entitled ``Debugging on SVR4 systems.''
-
- @node Other problems building libg++, Rebuild libg++?, Problems building libg++ on 386/486, installation
- @section Other problems building libg++
- @cindex libg++ on Ultrix
- @cindex libg++ on SunOS
-
- ``I am having trouble building libg++-2.2 or 2.3. Help!''
-
- On some platforms (for example, Ultrix), you may see errors complaining
- about being unable to open dummy.o. On other platforms (for example,
- SunOS), you may see problems having to do with the type of size_t.
- The fix for these problems is to make libg++ by saying "make CC=gcc".
- According to Per Bothner, it should no longer be necessary to specify
- "CC=gcc" for libg++-2.3.1.
-
- On Solaris 2.1, in the file @file{libg++/configure.in}, change
-
- @example
- *-*-solaris2) my_host=solaris2 ;;
- @end example
-
- to:
-
- @example
- *-*-solaris2*) my_host=solaris2 ;;
- @end example
-
- @node Rebuild libg++?, , Other problems building libg++, installation
- @section Do I need to rebuild libg++ to go with my new g++?
-
- ``After I upgraded g++ to the latest version, I'm seeing undefined
- symbols.''
-
- or
-
- ``If I upgrade to a new version of g++, do I need to reinstall libg++?''
-
- @cindex Name mangling change
- @cindex Type of size_t
- @cindex Incompatibilities between g++ versions
- This depends; as a rule, some upgrades will require rebuilding libg++
- and others will not. Both versions 2.3.3 and 2.4.0 introduced some
- incompatibilities with previous versions. For 2.3.3, the name mangling
- of certain virtual table names changed, which introduced an
- incompatiblity. For 2.4.0, the type of ``size_t'' changed on Suns
- from int (as declared by the include files provided by Sun) to
- unsigned long (the ANSI C and draft ANSI C++ standards declare that
- size_t must be unsigned, and the GCC maintainers are now correcting
- this ``bug'').
-
- Conclusion: if your old compiler is an older version than 2.3.3, you
- must rebuild libg++ when you install a new g++. If your vendor declares
- size_t to be a signed type and your old compiler is an older version
- than 2.4.0, you also must rebuild libg++.
-
- @cindex libg++
- This would be a good opportunity to upgrade to the libg++ 2.3.1 release
- if you haven't yet, to minimize the amount of rebuilding.
-
- @node User Problems, legalities, installation, Top
- @chapter User Problems
-
- @menu
- * static data members:: Linker reports undefined symbols for static data members
- * placement new syntax:: g++ won't accept the placement new syntax.
- * bug reports:: I think I have found a bug in g++.
- * porting to g++:: Porting programs from other compilers to g++
- * name mangling:: Why does g++ mangle names differently from other C++ compilers?
- * problems linking with other libraries:: Why can't g++ code link with code from other C++ compilers?
- * documentation:: What documentation exists for g++ 2.x?
- * agreement with standards:: What are the differences between g++ and the ARM specification of C++?
- * compiling standard libraries:: Will g++ compile InterViews? The NIH class library?
- * debugging on SVR4 systems:: Debugging on SVR4 systems
- @end menu
-
- @node static data members, placement new syntax, , User Problems
- @section Linker reports undefined symbols for static data members
-
- @cindex Static data members
- ``g++ reports undefined symbols for all my static data members when I link,
- even though the program works correctly for compiler XYZ. What's going on?''
-
- The problem is almost certainly that you don't give definitions for
- your static data members. If you have
-
- @example
- class Foo @{
- ...
- void method();
- static int bar;
- @};
- @end example
-
- you have only declared that there is an int named Foo::bar and a member
- function named Foo::method that is defined somewhere. You still need to
- defined BOTH method() and bar in some source file. According to the draft
- ANSI standard, you must supply an initializer, such as
-
- @example
- int Foo::bar = 0;
- @end example
-
- @noindent
- in one (and only one) source file.
-
- @node placement new syntax, bug reports, static data members, User Problems
- @section g++ won't accept the placement new syntax.
-
- ``I have a program that uses the "placement syntax" of operator new,
- e.g.
-
- @example
- new (somewhere) T;
- @end example
-
- @noindent
- and g++ won't accept it.''
-
- Up until version 2.3.1, g++ accepted an alternate form of the placement
- syntax, for historical reasons; use
-
- @example
- new @{somewhere@} T;
- @end example
-
- @noindent
- if you are using g++-2.2.2 or older.
-
- @cindex g++, version 2.3.1
- @cindex g++, version 2.3.2
- As of 2.3.1, g++ finally fixed this, using the standard ARM syntax for
- "placement new". A few remaining glitches were fixed in 2.3.2. The
- only remaining problem is with declarators for pointers to functions;
-
- @example
- new (void (*)(int)); // confuses gcc 2.3.2
- new (a) (void (*)(int)); // ditto
- @end example
-
- @cindex typedef
- These can be worked around with a typedef:
-
- @example
- typedef void (*fun)(int);
- new fun;
- new (a) fun;
- @end example
-
- @node bug reports, porting to g++, placement new syntax, User Problems
- @section I think I have found a bug in g++.
-
- @cindex Bug in g++, newly found
- ``I think I have found a bug in g++, but I'm not sure. How do I know,
- and who should I tell?''
-
- @cindex Manual, for gcc
- First, see the excellent section on bugs and bug reports in the gcc manual
- (which is included in the gcc distribution). As a short summary of that
- section: if the compiler gets a fatal signal, for any input, it's a bug
- (newer versions of g++ will ask you to send in a bug report when they
- detect an error in themselves). Same thing for producing invalid
- assembly code.
-
- When you report a bug, make sure to describe your platform (the type of
- computer, and the version of the operating system it is running) and the
- version of the compiler that you are running. Also provide enough code
- so that the g++ maintainers can duplicate your bug.
-
- I will add some extra notes that are C++-specific, since the notes from
- gcc are generally C-specific.
-
- @cindex g++ bug report
- First, mail your bug report to "bug-g++@@prep.ai.mit.edu". You may also
- post to gnu.g++.bug, but it's better to use mail, particularly if you
- have any doubt as to whether your news software generates correct reply
- addresses. Don't mail C++ bugs to bug-gcc@@prep.ai.mit.edu.
-
- @cindex libg++ bug report
- If your bug involves libg++ rather than the compiler, mail to
- bug-libg++@@prep.ai.mit.edu. If you're not sure, you could send your bug
- to both lists.
-
- @cindex C++, reference books
- @cindex ARM [Annotated C++ Ref Manual]
- Second, if your program does one thing, and you think it should do
- something else, it is best to consult a good reference if in doubt. The
- standard reference is "The Annotated C++ Reference Manual", by Ellis and
- Stroustrup (copyright 1990, ISBN #0-201-51459-1). This is what they're
- talking about on the net when they refer to ``the ARM''.
-
- The reference manual, without annotations, also appears in Stroustrup's
- "The C++ Programming Language, Second Edition" (copyright 1991, ISBN
- #0-201-53992-6). Both books are published by Addison-Wesley.
-
- @cindex AT&T cfront
- Note that the behavior of (any version of) AT&T's "cfront" compiler is
- NOT the standard for the language.
-
- @node porting to g++, name mangling, bug reports, User Problems
- @section Porting programs from other compilers to g++
-
- ``I have a program that runs on <some other C++ compiler>, and I want
- to get it running under g++. Is there anything I should watch out
- for?''
-
- @cindex Porting to g++
- First, see the questions on placement new syntax and static data members.
-
- There are two other reasons why a program that worked under one compiler
- might fail under another: your program may depend on the order of
- evaluation of side effects in an expression, or it may depend on the
- lifetime of a temporary (you may be assuming that a temporary object
- "lives" longer than the standard guarantees). As an example of the
- first:
-
- @example
- void func(int,int);
-
- int i = 3;
- func(i++,i++);
- @end example
-
- @cindex Order of evaluation, problems in porting
- Novice programmers think that the increments will be evaluated in strict
- left-to-right order. Neither C nor C++ guarantees this; the second
- increment might happen first, for example. func might get 3,4, or it
- might get 4,3.
-
- @cindex Classes, problems in porting
- @cindex Problems in porting, class
- The second problem often happens with classes like the libg++ String
- class. Let's say I have
-
- @example
- String func1();
- void func2(const char*);
- @end example
-
- and I say
-
- @example
- func2(func1());
- @end example
-
- because I know that class String has an "operator const char*". So what
- really happens is
-
- @example
- func2(func1().convert());
- @end example
-
- where I'm pretending I have a convert() method that is the same as the
- cast. This is unsafe, because the temporary String object may be deleted
- after its last use (the call to the conversion function), leaving the
- pointer pointing to garbage, so by the time func2 is called, it gets an
- invalid argument.
-
- @cindex ANSI draft standard
- If you think this is ugly, you should know that the ANSI C++ committee is
- still debating the lifetime-of-temporaries problem.
-
- @cindex Scope, problems in porting
- @cindex Problems in porting, scope
- For now, the safe way to write such code is to give the temporary a name,
- which forces it to live until the end of the scope of the name. For
- example:
-
- @example
- String& tmp = func1();
- func2(tmp);
- @end example
-
- Finally, like all compilers (but especially C++ compilers, it seems),
- g++ has bugs, and you may have tweaked one.
-
- @node name mangling, problems linking with other libraries, porting to g++, User Problems
- @section Why does g++ mangle names differently from other C++ compilers?
-
- See the answer to the next question.
- @cindex Mangling names
-
- @node problems linking with other libraries, documentation, name mangling, User Problems
- @section Why can't g++ code link with code from other C++ compilers?
-
- ``Why can't I link g++-compiled programs against libraries compiled by
- some other C++ compiler?''
-
- @cindex Mangling names
- @cindex Cygnus Support
- Some people think that,
- if only the FSF and Cygnus Support folks would stop being
- stubborn and mangle names the same way that, say, cfront does, then any
- g++-compiled program would link successfully against any cfront-compiled
- library and vice versa. Name mangling is the least of the problems.
- Compilers differ as to how objects are laid out, how multiple inheritance
- is implemented, how virtual function calls are handled, and so on, so if
- the name mangling were made the same, your programs would link against
- libraries provided from other compilers but then crash when run. For this
- reason, the ARM @emph{encourages} compiler writers to make their name mangling
- different from that of other compilers for the same platform.
- Incompatible libraries are then detected at link time, rather than at run
- time.
- @cindex ARM [Annotated C++ Ref Manual]
- @cindex Compiler differences
-
- @node documentation, agreement with standards, problems linking with other libraries, User Problems
- @section What documentation exists for g++ 2.x?
-
- @cindex g++, documentation
- Relatively little.
- The gcc manual describes the C front end, and also the back
- end, which is shared by the C++ compiler, but there is relatively little
- documentation for the C++ front end beyond a cursory description of the
- command line options (although more C++ specific
- information has been added to the gcc manual as of version 2.4.1).
-
- There is a Unix-style manual entry,
- "g++.1", in the gcc-2.x distribution; this describes the extra
- command-line options that g++ supports, and the #pragma interface and
- #pragma implementation directives.
-
- (Latest news: as of 2.4.0, these pragmas are finally described in the
- main gcc manual).
-
- A draft of a document describing the g++ internals appears in the gcc
- distribution (called g++int.texi); it is still incomplete.
-
- @node agreement with standards, compiling standard libraries, documentation, User Problems
- @section What are the differences between g++ and the ARM specification of C++?
-
- @cindex ARM [Annotated C++ Ref Manual]
- The chief thing missing from g++ that is in the ARM is exceptions.
- There are bits and pieces of exception code present, but it is not
- presently usable.
-
- @cindex g++, template support
- @cindex Templates
- The template implementation is still new. The implementation in 2.4.1
- represents a considerable improvement over that of previous releases,
- but it has a long way to go.
-
- g++ does not implement a separate pass to instantiate template functions
- and classes at this point; for this reason, it will not work, for the most
- part, to declare your template functions in one file and define them in
- another. The compiler will need to see the entire definition of the
- function, and will generate a static copy of the function in each file
- in which it is used.
-
- @cindex g++ bugs
- As with any beta-test compiler, there are bugs. You can help improve
- the compiler by submitting detailed bug reports.
-
- One of the weakest areas of g++ other than templates is the resolution
- of overloaded functions and operators in complex cases. The usual
- symptom is that in a case where the ARM says that it is ambiguous which
- function should be chosen, g++ chooses one (often the first one
- declared). This is usually not a problem when porting C++ code from
- other compilers to g++, but shows up as errors when code developed under
- g++ is ported to other compilers.
-
- [A full bug list would be very long indeed, so I won't put one here.
- I may add a list of frequently-reported bugs and "non-bugs" like the
- static class members issue mentioned above].
-
- @node compiling standard libraries, debugging on SVR4 systems, agreement with standards, User Problems
- @section Will g++ compile InterViews? The NIH class library?
-
- @cindex NIH class library
- The NIH class library uses a non-portable, compiler-dependent hack
- to initialize itself, which makes life difficult for g++ users.
- It will not work without modification, and I don't know what modifications
- are required or whether anyone has done them successfully.
-
- @cindex Cygnus Support
- @cindex NIHCL with g++
- Brendan Kehoe of Cygnus Support is working on getting NIHCL to build with g++.
- He says, "The NIHCL release will hopefully contain patches to gcc to
- let it build."
-
- [ From Steinar Bang <steinarb@@idt.unit.no>]
-
- @cindex InterViews 3.1
- @cindex gcc, version 2.3.3
- @cindex libg++, version 2.3
- InterViews 3.1 compiles and runs with gcc-2.3.3 and libg++-2.3, except
- that the "doc" application immediately dumps core when you try to run it.
- There is also a small glitch with idraw.
-
- There is a patch for InterViews 3.1 from Johan Garpendahl
- <garp@@isy.liu.se> available for FTP from site ``ugle.unit.no''.
- It is in the file
-
- /pub/X11/contrib/InterViews/g++/3.1-beta3-patch.
-
- This fixes two things: the Doc coredump, and the pattern menu of idraw.
- Read the instructions at the start of the file.
-
- [ I don't know whether the situation has changed with 2.4.0 ]
-
- @node debugging on SVR4 systems, , compiling standard libraries, User Problems
- @section Debugging on SVR4 systems
- @cindex System VR4, debugging
-
- ``When I use the -g flag on C++ code on a System V Release 4 system,
- I get lots of undefined symbols at link time. Why? Help!''
-
- [From Ron Guilmette:]
- The changes needed to get the g++ front-end to generate proper DWARF style
- debugging information for System V Release 4 are not yet completed, nor
- will they be until g++ version 2.4 (at the earliest).
-
- (Guess what? 2.4 is out, and it @emph{still} doesn't work, but now g++
- will give you a warning message and turn off debugging rather than put
- out bogus assembly code. Latest word from Brendan Kehoe: "it should
- work [better] in whatever major release comes after 2.4.1 ...").
-
- [Ron again:]
- There is nothing that you (as an end-user) can do to correct this problem.
- (It is actually @emph{many} problems, and they are all very complex.) Until
- the g++ maintainers have time to fix this, you should simply @emph{avoid} using
- the -g option when using g++ on SVR4.
-
- @node legalities, index, User Problems, Top
- @chapter What are the rules for shipping code built with g++ and libg++?
- @cindex Shipping rules
- @cindex GPL [GNU Public License]
-
- ``Is it is possible to distribute programs for profit that are created
- with g++ and use the g++ libraries?''
-
- I am not a lawyer, and this is not legal advice. In any case, I have
- little interest in telling people how to violate the spirit of the
- GNU licenses without violating the letter. This section tells you
- how to comply with the intention of the GNU licenses as best I understand
- them.
-
- @cindex FSF [Free Software Foundation]
- The FSF has no objection to your making money. Its only interest is that
- source code to their programs, and libraries, and to modified versions of
- their programs and libraries, is always available.
-
- The short answer is that you do not need to release the source to
- your program, but you can't just ship a stripped executable either.
-
- Compiling your code with a GNU compiler does not affect its copyright;
- it is still yours. However, in order to ship code that links in a GNU
- library such as libg++ there are certain rules you must follow. The
- rules are described in the file COPYING.LIB that accompanies gcc
- distributions; it is also included in the libg++ distribution.
- See that file for the exact rules. The agreement is called the
- Library GNU Public License or LGPL. It is much "looser" than the
- GNU Public License, or GPL, that covers must GNU programs.
-
- @cindex libg++, shipping code
- Here's the deal: let's say that you use some version of libg++,
- completely unchanged, in your software, and you want to ship only
- a binary form of your code. You can do this, but there are several
- special requirements. If you want to use libg++ but ship only object
- code for your code, you have to ship source for libg++ (or ensure
- somehow that your customer already has the source for the exact
- version you are using), and ship your application in linkable form.
- You cannot forbid your customer from reverse-engineering or extending
- your program by exploiting its linkable form.
-
- @cindex libg++, modifying
- Furthermore, if you modify libg++ itself, you must provide source
- for your modifications (making a derived class does not count as
- modifying the library -- that is "a work that uses the library").
-
- @node index, , legalities, Top
- @comment node-name, next, previous, up
- @appendix Concept Index
-
- @printindex cp
-
- @page
- @contents
- @bye
-
- --
- Joe Buck jbuck@ohm.EECS.Berkeley.EDU
-
-
-