Update for Go 1.2 release. Add support for linking SWIG code directly
into executable, rather than using a shared library.
This commit is contained in:
parent
39bf2efdc9
commit
1dca0af024
32 changed files with 385 additions and 371 deletions
|
|
@ -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>
|
||||
|
|
@ -117,13 +117,21 @@ swig -go -help
|
|||
package name is the SWIG module name.</td>
|
||||
</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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue