CGo bindings to libffi
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md
cgoflags.go
decoder.go
doc.go
encoder.go
ffi.go
ffi_darwin.go
ffi_darwin_test.go
ffi_linux.go
ffi_linux_test.go
ffi_test.go
type.go
type_test.go
value.go
value_test.go

README.md

go-ffi

Build Status

The ffi package wraps the libffi C library (and dlopen/dlclose) to provide an easy way to call arbitrary functions from Go.

Installation

ffi is go-get-able:

$ go get github.com/gonuts/ffi

Example

// dl-open a library: here, the math library on darwin
lib, err := ffi.NewLibrary("libm.dylib")
handle_err(err)

// get a handle to 'cos', with the correct signature
cos, err := lib.Fct("cos", ffi.Double, []Type{ffi.Double})
handle_err(err)

// call it
out := cos(0.).Float()
println("cos(0.)=", out)

err = lib.Close()
handle_err(err)

Limitations/TODO

  • no check is performed b/w what the user provides as a signature and the "real" signature

  • it would be handy to use some tool to automatically infer the "real" function signature

  • it would be handy to also handle structs

  • better handling of types with no direct equivalent in go (short,void,...)

  • better handling of C_string and conversion to/from Go strings

Documentation

http://godoc.org/github.com/gonuts/ffi