home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 7 / FreshFishVol7.bin / bbs / gnu / gcc-2.3.3-src.lha / GNU / src / amiga / gcc-2.3.3 / gcc.info-7 (.txt) < prev    next >
GNU Info File  |  1994-02-06  |  50KB  |  857 lines

  1. This is Info file gcc.info, produced by Makeinfo-1.49 from the input
  2. file gcc.texi.
  3.    This file documents the use and the internals of the GNU compiler.
  4.    Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
  5.    Permission is granted to make and distribute verbatim copies of this
  6. manual provided the copyright notice and this permission notice are
  7. preserved on all copies.
  8.    Permission is granted to copy and distribute modified versions of
  9. this manual under the conditions for verbatim copying, provided also
  10. that the sections entitled "GNU General Public License" and "Protect
  11. Your Freedom--Fight `Look And Feel'" are included exactly as in the
  12. original, and provided that the entire resulting derived work is
  13. distributed under the terms of a permission notice identical to this
  14.    Permission is granted to copy and distribute translations of this
  15. manual into another language, under the above conditions for modified
  16. versions, except that the sections entitled "GNU General Public
  17. License" and "Protect Your Freedom--Fight `Look And Feel'", and this
  18. permission notice, may be included in translations approved by the Free
  19. Software Foundation instead of in the original English.
  20. File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
  21. Interoperation
  22. ==============
  23.    This section lists various difficulties encountered in using GNU C or
  24. GNU C++ together with other compilers or with the assemblers, linkers,
  25. libraries and debuggers on certain systems.
  26.    * GNU C normally compiles functions to return small structures and
  27.      unions in registers.  Most other compilers arrange to return them
  28.      just like larger structures and unions.  This can lead to trouble
  29.      when you link together code compiled by different compilers. To
  30.      avoid the problem, you can use the option `-fpcc-struct-return'
  31.      when compiling with GNU CC.
  32.    * GNU C++ does not do name mangling in the same way as other C++
  33.      compilers.  This means that object files compiled with one compiler
  34.      cannot be used with another.
  35.      GNU C++ also uses different techniques for arranging virtual
  36.      function tables and the layout of class instances.  In general,
  37.      therefore, linking code compiled with different C++ compilers does
  38.      not work.
  39.    * Older GDB versions sometimes fail to read the output of GNU CC
  40.      version 2.  If you have trouble, get GDB version 4.4 or later.
  41.    * DBX rejects some files produced by GNU CC, though it accepts
  42.      similar constructs in output from PCC.  Until someone can supply a
  43.      coherent description of what is valid DBX input and what is not,
  44.      there is nothing I can do about these problems.  You are on your
  45.      own.
  46.    * The GNU assembler (GAS) does not support PIC.  To generate PIC
  47.      code, you must use some other assembler, such as `/bin/as'.
  48.    * On some BSD systems including some versions of Ultrix, use of
  49.      profiling causes static variable destructors (currently used only
  50.      in C++) not to be run.
  51.    * Use of `-I/usr/include' may cause trouble.
  52.      Many systems come with header files that won't work with GNU CC
  53.      unless corrected by `fixincludes'.  The corrected header files go
  54.      in a new directory; GNU CC searches this directory before
  55.      `/usr/include'. If you use `-I/usr/include', this tells GNU CC to
  56.      search `/usr/include' earlier on, before the corrected headers. 
  57.      The result is that you get the uncorrected header files.
  58.      Instead, you should use these options:
  59.           -I/usr/local/lib/gcc-lib/TARGET/VERSION/include -I/usr/include
  60.    * On a Sparc, GNU CC aligns all values of type `double' on an 8-byte
  61.      boundary, and it expects every `double' to be so aligned.  The Sun
  62.      compiler usually gives `double' values 8-byte alignment, with one
  63.      exception: function arguments of type `double' may not be aligned.
  64.      As a result, if a function compiled with Sun CC takes the address
  65.      of an argument of type `double' and passes this pointer of type
  66.      `double *' to a function compiled with GNU CC, dereferencing the
  67.      pointer may cause a fatal signal.
  68.      One way to solve this problem is to compile your entire program
  69.      with GNU CC.  Another solution is to modify the function that is
  70.      compiled with Sun CC to copy the argument into a local variable;
  71.      local variables are always properly aligned.  A third solution is
  72.      to modify the function that uses the pointer to dereference it via
  73.      the following function `access_double' instead of directly with
  74.      `*':
  75.           inline double
  76.           access_double (double *unaligned_ptr)
  77.           {
  78.             union d2i { double d; int i[2]; };
  79.           
  80.             union d2i *p = (union d2i *) unaligned_ptr;
  81.             union d2i u;
  82.           
  83.             u.i[0] = p->i[0];
  84.             u.i[1] = p->i[1];
  85.           
  86.             return u.d;
  87.           }
  88.      Storing into the pointer can be done likewise with the same union.
  89.    * On a Sun, linking using GNU CC fails to find a shared library and
  90.      reports that the library doesn't exist at all.
  91.      This happens if you are using the GNU linker, because it does only
  92.      static linking and looks only for unshared libraries.  If you have
  93.      a shared library with no unshared counterpart, the GNU linker
  94.      won't find anything.
  95.      We hope to make a linker which supports Sun shared libraries, but
  96.      please don't ask when it will be finished--we don't know.
  97.    * Sun forgot to include a static version of `libdl.a' with some
  98.      versions of SunOS (mainly 4.1).  This results in undefined symbols
  99.      when linking static binaries (that is, if you use `-static').  If
  100.      you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when
  101.      linking, compile and link against the file `mit/util/misc/dlsym.c'
  102.      from the MIT version of X windows.
  103.    * On the HP PA machine, ADB sometimes fails to work on functions
  104.      compiled with GNU CC.  Specifically, it fails to work on functions
  105.      that use `alloca' or variable-size arrays.  This is because GNU CC
  106.      doesn't generate HP-UX unwind descriptors for such functions.  It
  107.      may even be impossible to generate them.
  108.    * Debugging (`-g') is not supported on the HP PA machine, unless you
  109.      use the preliminary GNU tools (*note Installation::.).
  110.    * The HP-UX linker has a bug which can cause programs which make use
  111.      of `const' variables to fail in unusual ways.  If your program
  112.      makes use of global `const' variables, we suggest you compile with
  113.      the following additional options:
  114.           -Dconst="" -D__const="" -D__const__="" -fwritable-strings
  115.      This will force the `const' variables into the DATA subspace which
  116.      will avoid the linker bug.
  117.      Another option one might use to work around this problem is
  118.      `-mkernel'.  `-mkernel' changes how the address of variables is
  119.      computed to a sequence less likely to tickle the HP-UX linker bug.
  120.      We hope to work around this problem in GNU CC 2.4, if HP does not
  121.      fix it.
  122.    * Taking the address of a label may generate errors from the HP-UX
  123.      PA assembler.  GAS for the PA does not have this problem.
  124.    * GNU CC produced code will not yet link against HP-UX 8.0 shared
  125.      libraries. We expect to fix this problem in GNU CC 2.4.
  126.    * The current version of the assembler (`/bin/as') for the RS/6000
  127.      has certain problems that prevent the `-g' option in GCC from
  128.      working.
  129.      IBM has produced a fixed version of the assembler.  The replacement
  130.      assembler is not a standard component of either AIX 3.1.5 or AIX
  131.      3.2, but is expected to become standard in a future distribution. 
  132.      This assembler is available from IBM as APAR IX22829.  Yet more
  133.      bugs have been fixed in a newer assembler, which will shortly be
  134.      available as APAR IX26107.  See the file `README.RS6000' for more
  135.      details on these assemblers.
  136.    * On the IBM RS/6000, compiling code of the form
  137.           extern int foo;
  138.           
  139.           ... foo ...
  140.           
  141.           static int foo;
  142.      will cause the linker to report an undefined symbol `foo'.
  143.      Although this behavior differs from most other systems, it is not a