aboutsummaryrefslogtreecommitdiff
path: root/Doc/Manual
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2013-12-16 19:50:17 -0800
committerIan Lance Taylor <iant@google.com>2013-12-16 19:50:17 -0800
commit1dca0af0241475c11a842e4dd4c16ff7b367a962 (patch)
treec16b5ff43d5e2918d52e8557325ea53b79807086 /Doc/Manual
parent39bf2efdc980f800219cb488c24eef3ef6be5c5c (diff)
downloadswig-1dca0af0241475c11a842e4dd4c16ff7b367a962.tar.gz
Update for Go 1.2 release. Add support for linking SWIG code directly
into executable, rather than using a shared library.
Diffstat (limited to 'Doc/Manual')
-rw-r--r--Doc/Manual/Go.html67
1 files changed, 53 insertions, 14 deletions
diff --git a/Doc/Manual/Go.html b/Doc/Manual/Go.html
index 7a55a4364..3482d34dc 100644
--- a/Doc/Manual/Go.html
+++ b/Doc/Manual/Go.html
@@ -55,7 +55,7 @@ there is no convenient way to call C++ code. SWIG fills this gap.
<p>
There are (at least) two different Go compilers. One is the gc
-compiler, normally invoked under the names 6g, 8g, or 5g. The other
+compiler, normally invoked under via the go tool. The other
is the gccgo compiler, which is a frontend to the gcc compiler suite.
The interface to C/C++ code is completely different for the two Go
compilers. SWIG supports both, selected by a command line option.
@@ -80,7 +80,7 @@ code for gccgo, you should also use the <tt>-gccgo</tt> option.
<p>
-These are the command line options for SWIG's GO module. They can
+These are the command line options for SWIG's Go module. They can
also be seen by using:
</p>
@@ -108,7 +108,7 @@ swig -go -help
<tr>
<td>-gccgo</td>
<td>Generate code for gccgo. The default is to generate code for
- 6g/8g/5g.</td>
+ the gc compiler.</td>
</tr>
<tr>
@@ -118,12 +118,20 @@ swig -go -help
</tr>
<tr>
+<td>-use-shlib</td>
+<td>Tell SWIG to emit code that uses a shared library. This is only
+ meaningful for the gc compiler, which needs to know at compile time
+ whether a shared library will be used.</td>
+</tr>
+
+<tr>
<td>-soname %lt;name%gt;</td>
<td>Set the runtime name of the shared library that the dynamic linker
should include at runtime. The default is the package name with
".so" appended. This is only used when generating code for
- 6g/8g/5g; when using gccgo, the equivalent name will be taken from
- the <code>-soname</code> option passed to the linker.</td>
+ the gc compiler; when using gccgo, the equivalent name will be taken from
+ the <code>-soname</code> option passed to the linker. Using this
+ option implies the -use-shlib option.</td>
</tr>
<tr>
@@ -165,25 +173,56 @@ may be helpful to include it in your code, compiled with the usual C
or C++ compiler.
<li>
If using the gc compiler, MODULE_gc.c will contain C code which should
-be compiled with the C compiler distributed as part of the gc compiler: 6c, 8c,
-or 5c. It should then be combined with the compiled MODULE.go using
-gopack. This file will not be generated when using gccgo.
+be compiled with the C compiler distributed as part of the gc
+compiler. It should then be combined with the compiled MODULE.go
+using gopack. This file will not be generated when using gccgo.
</ul>
<p>
-A typical command sequence would look like this:
+Most Go programs are built using the go tool. The go tool has limited
+support for SWIG. To use it, put your SWIG interface into a file with
+the extension .swig, or, if you are wrapping C++ code, .swigcxx. Put
+that file in a GOPATH/src directory as usual for Go sources. Put
+other interface code in the same directory with extensions of .c and
+.cxx. The go build command and go install commands will automatically
+run SWIG for you and will build the interface code.
+</p>
+
+<p>
+You can also use SWIG directly yourself. When using the gc compiler
+version 1.2 or later, or when using gccgo, the code generated by SWIG
+can be linked directly into the Go program. A typical command
+sequence when using the gc compiler would look like this:
</p>
<div class="code"><pre>
% swig -go example.i
+% gcc -c code.c # The C library being wrapped.
+% gcc -c example_wrap.c
+% go tool 6g example.go
+% go tool 6c example_gc.c
+% go tool pack grc example.a example.6 example_gc.6 code.o example_wrap.o
+% go tool 6g main.go
+% go tool 6l main.6
+</pre></div>
+
+<p>
+You can also put the wrapped code into a shared library, and when
+using the gc compiler before version 1.2 this is the only supported
+option. A typical command sequence for this approach would look like
+this:
+</p>
+
+<div class="code"><pre>
+% swig -go -use-shlib example.i
% gcc -c -fpic example.c
% gcc -c -fpic example_wrap.c
% gcc -shared example.o example_wrap.o -o example.so
-% 6g example.go
-% 6c example_gc.c
-% gopack grc example.a example.6 example_gc.6
-% 6g main.go # your code, not generated by SWIG
-% 6l main.6
+% go tool 6g example.go
+% go tool 6c example_gc.c
+% go tool pack grc example.a example.6 example_gc.6
+% go tool 6g main.go # your code, not generated by SWIG
+% go tool 6l main.6
</pre></div>
<H2><a name="Go_basic_tour"></a>22.3 A tour of basic C/C++ wrapping</H2>