home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / unmaintained / mini / Comeau-C++ next >
Text File  |  1998-01-05  |  9KB  |  267 lines

  1. [ 6 January 1998
  2.   The Linux Comeau C++ mini-HOWTO is not being maintained by 
  3.   the author any more.  If you are interested in maintaining the 
  4.   Comeau C++ mini-HOWTO, please get in touch with me at 
  5.   <gregh@sunsite.unc.edu>. ]
  6.  
  7. //
  8. // The Linux Comeau C++ 4.0 HOWTO
  9. // Mark Swanson <ag010@freenet.carleton.ca>
  10. // v0.3, May 16,1997
  11. //
  12. // The Comeau Computing site is:
  13. // http://www.comeaucomputing.com
  14. //
  15.  
  16.  
  17. This document covers how to set up Comeau C++ (herin 
  18. referenced as "como") under Linux. It gives an overview of compiling,
  19. linking, running and debugging programs under it. It explains how to
  20. install and use the latest HP STL (Standard Template Library) reference code
  21. as well as SGI's (more advanced) STL.
  22.  
  23. This document is not a detailed feature comparison between g++ and como.
  24. Anyone who wishes to do this comparison for themselves can get a list
  25. of g++ bugs from ftp://ftp.cygnus.com/pub/g++/g++-bugs/README and compare
  26. them to the list of known bugs in como.
  27. (No one has had the time to create -except for what's mentioned in this FAQ -
  28. a bug list for como. The only problem with it that I know of is it doesn't
  29. have a 100% working iostreams library yet. )
  30.  
  31. ======================================================================
  32. ======================================================================
  33. PART 0  DEPENDENCIES
  34.  
  35. 0.0  You might have to use GCC2.7.2.1 or greater.
  36.  
  37. 0.1  You SHOULD install libg++2.7.2.1 and use the como
  38.      iostream library libiostreamcomo.a(283K) to get iostreams working.
  39.  
  40.      <TODO> Has como compiled/made available the more stable library yet?
  41.             Will it always be called libcomodios.a?
  42.  
  43.      The *catch* here is that if you wish to use the SGI or HP STL libraries
  44.      you won't want to use the STL include files found in /usr/include/g++.
  45.      You can make sure you don't by doing the following:
  46.  
  47.      cd /usr/include/g++
  48.      mkdir gnustl
  49.      mv  algo.h algobase.h alloc.h bool.h bvector.h defalloc.h deque.h function.h heap.h iterator.h list.h map.h multimap.h multiset.h pair.h set.h stack.h tempbuf.h tree.h vector.h gnustl
  50.      
  51.  
  52.      Please send me an email if you've got it working on something other
  53.      than the 2.7.2.1 release of g++.
  54.      
  55. 0.2  I recommend installing libc5.4.23 or greater. I had trouble with earlier
  56.      versions of libc. Symptoms include running out of virtual memory when
  57.      compiling small programs. I suspect something in the include files
  58.      but since upgrading solved my problem I haven't really looked into it.
  59.      
  60.      Again, keep me updated me on this.
  61.  
  62.  
  63. 0.3  You can find the binary/source distributions of the above packages at:
  64.      ftp://ftp.tsx-11.mit.edu/pub/linux/packages/GCC
  65.  
  66.  
  67. 0.4  Remember to follow the instructions on the Comeau Computing patch page:
  68.      http://www.comeaucomputing.com
  69.      You MUST do this before reading anything else in this document!
  70.  
  71.  
  72. =====================================================================
  73. PART I  MODIFICATIONS TO GCC INCLUDE FILES
  74.  
  75.  
  76. 1.0  stdarg or vararg replacement code
  77.         Use the como supplied stdarg.h file. You should have already done
  78.         this. You were supposed to follow the instructions on the patch
  79.         page at step 0.5.
  80.  
  81. 1.1  /usr/include/errno.h line 34.
  82.         It's an extern "C" problem. Improperly defined in the header file.
  83.         We need to move the following lines:
  84.  
  85.            #ifdef  __USE_BSD
  86.            extern int sys_nerr;
  87.            extern char *sys_errlist[];
  88.            #endif
  89.            #ifdef  __USE_GNU
  90.            extern int _sys_nerr;
  91.            extern char *_sys_errlist[];
  92.            #endif 
  93.  
  94.         to just below the __BEGIN_DECLS line. If you don't do this, then these
  95.         definitions will have a different linkage specification than the
  96.         ones in /usr/include/stdio.h. This file is at fault.
  97.  
  98. 1.2     /usr/lib/gcc-lib/iX86-linux/2.7.2.1/include/stddef.h ~line 305.
  99.         This section #defines NULL to a void * which is wrong. Change the
  100.         section:
  101.  
  102.         /* A null pointer constant.  */
  103.  
  104.         // Commented out for Como
  105.         //#if defined (_STDDEF_H) || defined (__need_NULL)
  106.         //#undef NULL        /* in case <stdio.h> has defined it. */
  107.         //#define NULL ((void *)0)
  108.         //#endif    /* NULL not defined and <stddef.h> or need NULL.  */
  109.         //#undef    __need_NULL
  110.        
  111.         to look like:
  112.  
  113.         // Added for como
  114.         #ifndef NULL
  115.             #ifdef __cplusplus
  116.                 #define NULL 0
  117.             #else
  118.                 #define NULL ((void *) 0)
  119.             #endif
  120.         #endif
  121.         // end of 'Added for como'
  122.  
  123. 1.3  /usr/lib/gcc-lib/i486-linux/2.7.2.1/include/syslimits.h 7
  124.      
  125.         #include_next is a gcc'ism. Change this to a normal include.
  126.  
  127.     /usr/lib/gcc-lib/i486-linux/2.7.2.1/include/limits.h 112
  128.         
  129.         Comment out this next line.
  130.  
  131.         //#include_next <limits.h>  /* recurse down to the real one */
  132.  
  133.         
  134. ========================================================================
  135. PART II  STL ISSUES
  136.  
  137. 2.1  How to get HP's or SGI's latest STL code.
  138.  
  139.      The instructions for getting HP's or SGI's STL code are given on
  140.      Comeau's WWW site.
  141.  
  142.  
  143. 2.2  How to modify the HP STL to get rid of a small warning message.
  144.      (new operator and throw() exception specification)
  145.  
  146.      In defalloc.h: 26
  147.         Comment it out. The specification is already in the new.h provided
  148.         by Comeau Computing.
  149.  
  150.  
  151. =====================================================================
  152. PART III  MICROSOFT FILE FORMAT COMPATABILITY
  153.  
  154. 3.0  Compiling files with MS-DOS line termination
  155.      Como has a version of their compiler available for Linux that handles
  156.      MS-DOS CRLF style line terminations. Comeau Computing has stated that
  157.      this will be a standard option in the free upgrades. Until then, I'm
  158.      sure they will make it available to those who ask.
  159.  
  160.  
  161. =====================================================================
  162. PART IV  WORKING AROUND GNU SPECIFIC COMPILER OPTIONS
  163.  
  164. 4.1  __attribute__
  165.  
  166.      In assert.h you will more than likely run into this problem. The fix is
  167.      simply: delete the __attribute__((xxx)); line and place the ';' character
  168.      at the end of the line above it.
  169.  
  170. 4.2  Macros with (...) arguments
  171.  
  172.      Take the following GNU macro:
  173.         #define TRACE(x...)
  174.      
  175.      The como preprocessor doesn't allow macros with ... arguments. Use 
  176.      functions instead.
  177.  
  178.  
  179. =======================================================================
  180. PART V  IOSTREAMS
  181.  
  182. 5.0  iostreams.h
  183.  
  184.      Comeau Computing along with other individuals on the net (myself
  185.      included) are working on making gnu iostreams compile under como.
  186.      We need to get around some gnu specific vtable mangling problems.
  187.      A version of iostreams that works except for fstreams and streambuf
  188.      code is available from the Comeau web site.
  189.  
  190. =======================================================================
  191. PART VI  DEBUGGING WITH GDB
  192.  
  193. 6.0  Using GDB with como
  194.      
  195.      This works to some extent but not fully. You can start debugging your
  196.      application, display variables etc., but in my static callback
  197.      functions gdb can only display some of the functions local variables...
  198.      incorrectly. This is a g++ name mangling problem. The GNU debugger
  199.      expects to be debugging code compiled with a GNU compiler which uses
  200.      a different name mangling scheme.
  201.  
  202. 6.1  Let me know if there is another debugger that would work better!
  203.      (And cc support@comeaucomputing.com as well.)
  204.  
  205. 6.2  One thing you can do is 'info local' at the point where you wish to
  206.      view the contents of your variables. Take the following source code
  207.      for example:
  208.  
  209.      #include <stdio.h>
  210.      int main()
  211.      {
  212.          int a=0, b=1;
  213.          printf("a=%d, b=%d\n", a, b);
  214.          return 0;
  215.      }
  216.      
  217.      After compiling with 'como -g test.cxx' we start gdb with 'gdb a.out'.
  218.      
  219.      (Next we break on the printf() line)
  220.      (gdb) break 5
  221.  
  222.      (Now run the little program)
  223.      (gdb) run
  224.  
  225.      (gdb) info local
  226.      __1044_6_a = 0
  227.      __1044_11_b = 1
  228.  
  229.      *** You were expecting to see a = 0 not __1044_6_a = 0 ***
  230.      * Don't Panic! * :-) instead of:
  231.  
  232.      (gdb) print a
  233.  
  234.      you have to:
  235.  
  236.      (gdb) print __1044_6_a
  237.  
  238.      This is a name mangling problem and there is no solution for it right
  239.      now. I'm sure Comeau Computing will publish their name mangling rules;
  240.      then you can write a patch for gdb. Let me know when you do:-)
  241.  
  242. =======================================================================
  243. PART VII  MISCELLANEOUS ISSUES
  244.  
  245. 1.   Add -D NULL=0 in EDG_DEFAULT_DEFINES to /<YourComeauDir>/bin/como.
  246.  
  247.      Since this is a C++ compiler it will complain if it thinks NULL is 
  248.      a (void *)0.
  249.  
  250. 2.  byteorder.h may sometimes be a problem.
  251.  
  252.     A header file that is rarely used. -D__BYTEORDER_H will almost always
  253.     solve your problem.
  254.  
  255. 3.  stddef.h - where is it? -
  256.  
  257.     /usr/lib/gcc-lib/i486-linux/2.7.2.1/include
  258.     
  259.     At the very least, it is included in line 30 of the SGI STL file deque.h.
  260.  
  261.     You should make that part of your EDGE_DEFAULT_INCLUDE_DIRS. Unfortunately,
  262.     this makes two files in that directory get included sometimes:
  263.     limits.h and  syslimits.h. These will cause problems. See the solution
  264.     mentioned in 1.3.
  265.  
  266. -----------------------
  267.