github.com/alash3al/go@v0.0.0-20150827002835-d497eeb00540/doc/gccgo_install.html (about)

     1  <!--{
     2  	"Title": "Setting up and using gccgo",
     3  	"Path": "/doc/install/gccgo"
     4  }-->
     5  
     6  <p>
     7  This document explains how to use gccgo, a compiler for
     8  the Go language.  The gccgo compiler is a new frontend
     9  for GCC, the widely used GNU compiler.  Although the
    10  frontend itself is under a BSD-style license, gccgo is
    11  normally used as part of GCC and is then covered by
    12  the <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public
    13  License</a> (the license covers gccgo itself as part of GCC; it
    14  does not cover code generated by gccgo).
    15  </p>
    16  
    17  <p>
    18  Note that gccgo is not the <code>gc</code> compiler; see
    19  the <a href="/doc/install.html">Installing Go</a> instructions for that
    20  compiler.
    21  </p>
    22  
    23  <h2 id="Releases">Releases</h2>
    24  
    25  <p>
    26  The simplest way to install gccgo is to install a GCC binary release
    27  built to include Go support.  GCC binary releases are available from
    28  <a href="http://gcc.gnu.org/install/binaries.html">various
    29  websites</a> and are typically included as part of GNU/Linux
    30  distributions.  We expect that most people who build these binaries
    31  will include Go support.
    32  </p>
    33  
    34  <p>
    35  The GCC 4.7.1 release and all later 4.7 releases include a complete
    36  <a href="/doc/go1.html">Go 1</a> compiler and libraries.
    37  </p>
    38  
    39  <p>
    40  Due to timing, the GCC 4.8.0 and 4.8.1 releases are close to but not
    41  identical to Go 1.1.  The GCC 4.8.2 release includes a complete Go
    42  1.1.2 implementation.
    43  </p>
    44  
    45  <p>
    46  The GCC 4.9 releases include a complete Go 1.2 implementation.
    47  </p>
    48  
    49  <p>
    50  The GCC 5 releases include a complete implementation of the Go 1.4
    51  user libraries.  The Go 1.4 runtime is not fully merged, but that
    52  should not be visible to Go programs.
    53  </p>
    54  
    55  <h2 id="Source_code">Source code</h2>
    56  
    57  <p>
    58  If you cannot use a release, or prefer to build gccgo for
    59  yourself, 
    60  the gccgo source code is accessible via Subversion.  The
    61  GCC web site
    62  has <a href="http://gcc.gnu.org/svn.html">instructions for getting the
    63  GCC source code</a>.  The gccgo source code is included.  As a
    64  convenience, a stable version of the Go support is available in
    65  a branch of the main GCC code
    66  repository: <code>svn://gcc.gnu.org/svn/gcc/branches/gccgo</code>.
    67  This branch is periodically updated with stable Go compiler sources.
    68  </p>
    69  
    70  <p>
    71  Note that although <code>gcc.gnu.org</code> is the most convenient way
    72  to get the source code for the Go frontend, it is not where the master
    73  sources live.  If you want to contribute changes to the Go frontend
    74  compiler, see <a href="/doc/gccgo_contribute.html">Contributing to
    75  gccgo</a>.
    76  </p>
    77  
    78  
    79  <h2 id="Building">Building</h2>
    80  
    81  <p>
    82  Building gccgo is just like building GCC
    83  with one or two additional options.  See
    84  the <a href="http://gcc.gnu.org/install/">instructions on the gcc web
    85  site</a>.  When you run <code>configure</code>, add the
    86  option <code>--enable-languages=c,c++,go</code> (along with other
    87  languages you may want to build).  If you are targeting a 32-bit x86,
    88  then you will want to build gccgo to default to
    89  supporting locked compare and exchange instructions; do this by also
    90  using the <code>configure</code> option <code>--with-arch=i586</code>
    91  (or a newer architecture, depending on where you need your programs to
    92  run).  If you are targeting a 64-bit x86, but sometimes want to use
    93  the <code>-m32</code> option, then use the <code>configure</code>
    94  option <code>--with-arch-32=i586</code>.
    95  </p>
    96  
    97  <h3 id="Gold">Gold</h3>
    98  
    99  <p>
   100  On x86 GNU/Linux systems the gccgo compiler is able to
   101  use a small discontiguous stack for goroutines.  This permits programs
   102  to run many more goroutines, since each goroutine can use a relatively
   103  small stack.  Doing this requires using the gold linker version 2.22
   104  or later.  You can either install GNU binutils 2.22 or later, or you
   105  can build gold yourself.
   106  </p>
   107  
   108  <p>
   109  To build gold yourself, build the GNU binutils,
   110  using <code>--enable-gold=default</code> when you run
   111  the <code>configure</code> script.  Before building, you must install
   112  the flex and bison packages.  A typical sequence would look like
   113  this (you can replace <code>/opt/gold</code> with any directory to
   114  which you have write access):
   115  </p>
   116  
   117  <pre>
   118  cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src login
   119  [password is "anoncvs"]
   120  [The next command will create a directory named src, not binutils]
   121  cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src co binutils
   122  mkdir binutils-objdir
   123  cd binutils-objdir
   124  ../src/configure --enable-gold=default --prefix=/opt/gold
   125  make
   126  make install
   127  </pre>
   128  
   129  <p>
   130  However you install gold, when you configure gccgo, use the
   131  option <code>--with-ld=<var>GOLD_BINARY</var></code>.
   132  </p>
   133  
   134  <h3 id="Prerequisites">Prerequisites</h3>
   135  
   136  <p>
   137  A number of prerequisites are required to build GCC, as
   138  described on
   139  the <a href="http://gcc.gnu.org/install/prerequisites.html">gcc web
   140  site</a>.  It is important to install all the prerequisites before
   141  running the gcc <code>configure</code> script.
   142  The prerequisite libraries can be conveniently downloaded using the
   143  script <code>contrib/download_prerequisites</code> in the GCC sources.
   144  
   145  <h3 id="Build_commands">Build commands</h3>
   146  
   147  <p>
   148  Once all the prerequisites are installed, then a typical build and
   149  install sequence would look like this (only use
   150  the <code>--with-ld</code> option if you are using the gold linker as
   151  described above):
   152  </p>
   153  
   154  <pre>
   155  svn checkout svn://gcc.gnu.org/svn/gcc/branches/gccgo gccgo
   156  mkdir objdir
   157  cd objdir
   158  ../gccgo/configure --prefix=/opt/gccgo --enable-languages=c,c++,go --with-ld=/opt/gold/bin/ld
   159  make
   160  make install
   161  </pre>
   162  
   163  <h3 id="Ubuntu">A note on Ubuntu</h3>
   164  
   165  <p>
   166  Current versions of Ubuntu and versions of GCC before 4.8 disagree on
   167  where system libraries and header files are found.  This is not a
   168  gccgo issue.  When building older versions of GCC, setting these
   169  environment variables while configuring and building gccgo may fix the
   170  problem.
   171  </p>
   172  
   173  <pre>
   174  LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
   175  C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
   176  CPLUS_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
   177  export LIBRARY_PATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH
   178  </pre>
   179  
   180  <h2 id="Using_gccgo">Using gccgo</h2>
   181  
   182  <p>
   183  The gccgo compiler works like other gcc frontends.  As of GCC 5 the gccgo
   184  installation also includes a version of the <code>go</code> command,
   185  which may be used to build Go programs as described at
   186  <a href="https://golang.org/cmd/go">https://golang.org/cmd/go</a>.
   187  </p>
   188  
   189  <p>
   190  To compile a file without using the <code>go</code> command:
   191  </p>
   192  
   193  <pre>
   194  gccgo -c file.go
   195  </pre>
   196  
   197  <p>
   198  That produces <code>file.o</code>. To link files together to form an
   199  executable:
   200  </p>
   201  
   202  <pre>
   203  gccgo -o file file.o
   204  </pre>
   205  
   206  <p>
   207  To run the resulting file, you will need to tell the program where to
   208  find the compiled Go packages.  There are a few ways to do this:
   209  </p>
   210  
   211  <ul>
   212  <li>
   213  <p>
   214  Set the <code>LD_LIBRARY_PATH</code> environment variable:
   215  </p>
   216  
   217  <pre>
   218  LD_LIBRARY_PATH=${prefix}/lib/gcc/MACHINE/VERSION
   219  [or]
   220  LD_LIBRARY_PATH=${prefix}/lib64/gcc/MACHINE/VERSION
   221  export LD_LIBRARY_PATH
   222  </pre>
   223  
   224  <p>
   225  Here <code>${prefix}</code> is the <code>--prefix</code> option used
   226  when building gccgo.  For a binary install this is
   227  normally <code>/usr</code>.  Whether to use <code>lib</code>
   228  or <code>lib64</code> depends on the target.
   229  Typically <code>lib64</code> is correct for x86_64 systems,
   230  and <code>lib</code> is correct for other systems.  The idea is to
   231  name the directory where <code>libgo.so</code> is found.
   232  </p>
   233  
   234  </li>
   235  
   236  <li>
   237  <p>
   238  Passing a <code>-Wl,-R</code> option when you link (replace lib with
   239  lib64 if appropriate for your system):
   240  </p>
   241  
   242  <pre>
   243  go build -gccgoflags -Wl,-R,${prefix}/lib/gcc/MACHINE/VERSION
   244  [or]
   245  gccgo -o file file.o -Wl,-R,${prefix}/lib/gcc/MACHINE/VERSION
   246  </pre>
   247  </li>
   248  
   249  <li>
   250  <p>
   251  Use the <code>-static-libgo</code> option to link statically against
   252  the compiled packages.
   253  </p>
   254  </li>
   255  
   256  <li>
   257  <p>
   258  Use the <code>-static</code> option to do a fully static link (the
   259  default for the <code>gc</code> compiler).
   260  </p>
   261  </li>
   262  </ul>
   263  
   264  <h2 id="Options">Options</h2>
   265  
   266  <p>
   267  The gccgo compiler supports all GCC options
   268  that are language independent, notably the <code>-O</code>
   269  and <code>-g</code> options.
   270  </p>
   271  
   272  <p>
   273  The <code>-fgo-pkgpath=PKGPATH</code> option may be used to set a
   274  unique prefix for the package being compiled.
   275  This option is automatically used by the go command, but you may want
   276  to use it if you invoke gccgo directly.
   277  This option is intended for use with large
   278  programs that contain many packages, in order to allow multiple
   279  packages to use the same identifier as the package name.
   280  The <code>PKGPATH</code> may be any string; a good choice for the
   281  string is the path used to import the package.
   282  </p>
   283  
   284  <p>
   285  The <code>-I</code> and <code>-L</code> options, which are synonyms
   286  for the compiler, may be used to set the search path for finding
   287  imports.
   288  These options are not needed if you build with the go command.
   289  </p>
   290  
   291  <h2 id="Imports">Imports</h2>
   292  
   293  <p>
   294  When you compile a file that exports something, the export
   295  information will be stored directly in the object file.
   296  If you build with gccgo directly, rather than with the go command,
   297  then when you import a package, you must tell gccgo how to find the
   298  file.
   299  </p>
   300  
   301  <p>
   302  When you import the package <var>FILE</var> with gccgo,
   303  it will look for the import data in the following files, and use the
   304  first one that it finds.
   305  
   306  <ul>
   307  <li><code><var>FILE</var>.gox</code>
   308  <li><code>lib<var>FILE</var>.so</code>
   309  <li><code>lib<var>FILE</var>.a</code>
   310  <li><code><var>FILE</var>.o</code>
   311  </ul>
   312  
   313  <p>
   314  <code><var>FILE</var>.gox</code>, when used, will typically contain
   315  nothing but export data. This can be generated from
   316  <code><var>FILE</var>.o</code> via
   317  </p>
   318  
   319  <pre>
   320  objcopy -j .go_export FILE.o FILE.gox
   321  </pre>
   322  
   323  <p>
   324  The gccgo compiler will look in the current
   325  directory for import files.  In more complex scenarios you
   326  may pass the <code>-I</code> or <code>-L</code> option to
   327  gccgo.  Both options take directories to search. The
   328  <code>-L</code> option is also passed to the linker.
   329  </p>
   330  
   331  <p>
   332  The gccgo compiler does not currently (2015-06-15) record
   333  the file name of imported packages in the object file. You must
   334  arrange for the imported data to be linked into the program.
   335  Again, this is not necessary when building with the go command.
   336  </p>
   337  
   338  <pre>
   339  gccgo -c mypackage.go              # Exports mypackage
   340  gccgo -c main.go                   # Imports mypackage
   341  gccgo -o main main.o mypackage.o   # Explicitly links with mypackage.o
   342  </pre>
   343  
   344  <h2 id="Debugging">Debugging</h2>
   345  
   346  <p>
   347  If you use the <code>-g</code> option when you compile, you can run
   348  <code>gdb</code> on your executable.  The debugger has only limited
   349  knowledge about Go.  You can set breakpoints, single-step,
   350  etc.  You can print variables, but they will be printed as though they
   351  had C/C++ types.  For numeric types this doesn't matter.  Go strings
   352  and interfaces will show up as two-element structures.  Go
   353  maps and channels are always represented as C pointers to run-time
   354  structures.
   355  </p>
   356  
   357  <h2 id="C_Interoperability">C Interoperability</h2>
   358  
   359  <p>
   360  When using gccgo there is limited interoperability with C,
   361  or with C++ code compiled using <code>extern "C"</code>.
   362  </p>
   363  
   364  <h3 id="Types">Types</h3>
   365  
   366  <p>
   367  Basic types map directly: an <code>int</code> in Go is an <code>int</code>
   368  in C, an <code>int32</code> is an <code>int32_t</code>,
   369  etc.  Go <code>byte</code> is equivalent to C <code>unsigned
   370  char</code>.
   371  Pointers in Go are pointers in C. A Go <code>struct</code> is the same as C
   372  <code>struct</code> with the same fields and types.
   373  </p>
   374  
   375  <p>
   376  The Go <code>string</code> type is currently defined as a two-element
   377  structure (this is <b style="color: red;">subject to change</b>):
   378  </p>
   379  
   380  <pre>
   381  struct __go_string {
   382    const unsigned char *__data;
   383    int __length;
   384  };
   385  </pre>
   386  
   387  <p>
   388  You can't pass arrays between C and Go. However, a pointer to an
   389  array in Go is equivalent to a C pointer to the
   390  equivalent of the element type.
   391  For example, Go <code>*[10]int</code> is equivalent to C <code>int*</code>,
   392  assuming that the C pointer does point to 10 elements.
   393  </p>
   394  
   395  <p>
   396  A slice in Go is a structure.  The current definition is
   397  (this is <b style="color: red;">subject to change</b>):
   398  </p>
   399  
   400  <pre>
   401  struct __go_slice {
   402    void *__values;
   403    int __count;
   404    int __capacity;
   405  };
   406  </pre>
   407  
   408  <p>
   409  The type of a Go function is a pointer to a struct (this is
   410  <b style="color: red;">subject to change</b>).  The first field in the
   411  struct points to the code of the function, which will be equivalent to
   412  a pointer to a C function whose parameter types are equivalent, with
   413  an additional trailing parameter.  The trailing parameter is the
   414  closure, and the argument to pass is a pointer to the Go function
   415  struct.
   416  
   417  When a Go function returns more than one value, the C function returns
   418  a struct.  For example, these functions are roughly equivalent:
   419  </p>
   420  
   421  <pre>
   422  func GoFunction(int) (int, float64)
   423  struct { int i; float64 f; } CFunction(int, void*)
   424  </pre>
   425  
   426  <p>
   427  Go <code>interface</code>, <code>channel</code>, and <code>map</code>
   428  types have no corresponding C type (<code>interface</code> is a
   429  two-element struct and <code>channel</code> and <code>map</code> are
   430  pointers to structs in C, but the structs are deliberately undocumented). C
   431  <code>enum</code> types correspond to some integer type, but precisely
   432  which one is difficult to predict in general; use a cast. C <code>union</code>
   433  types have no corresponding Go type. C <code>struct</code> types containing
   434  bitfields have no corresponding Go type. C++ <code>class</code> types have
   435  no corresponding Go type.
   436  </p>
   437  
   438  <p>
   439  Memory allocation is completely different between C and Go, as Go uses
   440  garbage collection. The exact guidelines in this area are undetermined,
   441  but it is likely that it will be permitted to pass a pointer to allocated
   442  memory from C to Go. The responsibility of eventually freeing the pointer
   443  will remain with C side, and of course if the C side frees the pointer
   444  while the Go side still has a copy the program will fail. When passing a
   445  pointer from Go to C, the Go function must retain a visible copy of it in
   446  some Go variable. Otherwise the Go garbage collector may delete the
   447  pointer while the C function is still using it.
   448  </p>
   449  
   450  <h3 id="Function_names">Function names</h3>
   451  
   452  <p>
   453  Go code can call C functions directly using a Go extension implemented
   454  in gccgo: a function declaration may be preceded by
   455  <code>//extern NAME</code>.  For example, here is how the C function
   456  <code>open</code> can be declared in Go:
   457  </p>
   458  
   459  <pre>
   460  //extern open
   461  func c_open(name *byte, mode int, perm int) int
   462  </pre>
   463  
   464  <p>
   465  The C function naturally expects a NUL-terminated string, which in
   466  Go is equivalent to a pointer to an array (not a slice!) of
   467  <code>byte</code> with a terminating zero byte. So a sample call
   468  from Go would look like (after importing the <code>syscall</code> package):
   469  </p>
   470  
   471  <pre>
   472  var name = [4]byte{'f', 'o', 'o', 0};
   473  i := c_open(&amp;name[0], syscall.O_RDONLY, 0);
   474  </pre>
   475  
   476  <p>
   477  (this serves as an example only, to open a file in Go please use Go's
   478  <code>os.Open</code> function instead).
   479  </p>
   480  
   481  <p>
   482  Note that if the C function can block, such as in a call
   483  to <code>read</code>, calling the C function may block the Go program.
   484  Unless you have a clear understanding of what you are doing, all calls
   485  between C and Go should be implemented through cgo or SWIG, as for
   486  the <code>gc</code> compiler.
   487  </p>
   488  
   489  <p>
   490  The name of Go functions accessed from C is subject to change. At present
   491  the name of a Go function that does not have a receiver is
   492  <code>prefix.package.Functionname</code>. The prefix is set by
   493  the <code>-fgo-prefix</code> option used when the package is compiled;
   494  if the option is not used, the default is <code>go</code>.
   495  To call the function from C you must set the name using
   496  a GCC extension.
   497  </p>
   498  
   499  <pre>
   500  extern int go_function(int) __asm__ ("myprefix.mypackage.Function");
   501  </pre>
   502  
   503  <h3 id="Automatic_generation_of_Go_declarations_from_C_source_code">
   504  Automatic generation of Go declarations from C source code</h3>
   505  
   506  <p>
   507  The Go version of GCC supports automatically generating
   508  Go declarations from C code. The facility is rather awkward, and most
   509  users should use the <a href="/cmd/cgo">cgo</a> program with
   510  the <code>-gccgo</code> option instead.
   511  </p>
   512  
   513  <p>
   514  Compile your C code as usual, and add the option
   515  <code>-fdump-go-spec=<var>FILENAME</var></code>.  This will create the
   516  file <code><var>FILENAME</var></code> as a side effect of the
   517  compilation.  This file will contain Go declarations for the types,
   518  variables and functions declared in the C code.  C types that can not
   519  be represented in Go will be recorded as comments in the Go code.  The
   520  generated file will not have a <code>package</code> declaration, but
   521  can otherwise be compiled directly by gccgo.
   522  </p>
   523  
   524  <p>
   525  This procedure is full of unstated caveats and restrictions and we make no
   526  guarantee that it will not change in the future. It is more useful as a
   527  starting point for real Go code than as a regular procedure.
   528  </p>
   529  
   530  <h2 id="RTEMS_Port">RTEMS Port</h2>
   531  <p>
   532  The gccgo compiler has been ported to <a href="http://www.rtems.com/">
   533  <code>RTEMS</code></a>. <code>RTEMS</code> is a real-time executive
   534  that provides a high performance environment for embedded applications
   535  on a range of processors and embedded hardware. The current gccgo
   536  port is for x86. The goal is to extend the port to most of the
   537  <a href="http://www.rtems.org/wiki/index.php/SupportedCPUs">
   538  architectures supported by <code>RTEMS</code></a>. For more information on the port,
   539  as well as instructions on how to install it, please see this
   540  <a href="http://www.rtems.org/wiki/index.php/GCCGoRTEMS"><code>RTEMS</code> Wiki page</a>.