From f097efc195429fe250d1d065fc6e5bfccff3b025 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Sun, 7 Jan 2018 02:04:44 +0800 Subject: [PATCH] =?UTF-8?q?ch2-07:=20=E5=AE=9E=E7=8E=B0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +++ examples/ch2-07/hello-so/Makefile | 8 ++++ examples/ch2-07/hello-so/_test_so.c | 7 ++++ examples/ch2-07/hello-so/main.go | 11 +++++ examples/ch2-07/hello-so/say-hello.h | 60 ++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+) create mode 100644 examples/ch2-07/hello-so/Makefile create mode 100644 examples/ch2-07/hello-so/_test_so.c create mode 100644 examples/ch2-07/hello-so/main.go create mode 100644 examples/ch2-07/hello-so/say-hello.h diff --git a/.gitignore b/.gitignore index 21bafdf..6e5cd1c 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,9 @@ _obj # macOS .DS_Store + +*.so +*.dll +*.obj +*.o +a.out diff --git a/examples/ch2-07/hello-so/Makefile b/examples/ch2-07/hello-so/Makefile new file mode 100644 index 0000000..68d7737 --- /dev/null +++ b/examples/ch2-07/hello-so/Makefile @@ -0,0 +1,8 @@ +default: + go build -buildmode=c-shared -o say-hello.so main.go + gcc -Wall _test_so.c ./say-hello.so + ./a.out + +clean: + -rm *.so + -rm *.out diff --git a/examples/ch2-07/hello-so/_test_so.c b/examples/ch2-07/hello-so/_test_so.c new file mode 100644 index 0000000..889e666 --- /dev/null +++ b/examples/ch2-07/hello-so/_test_so.c @@ -0,0 +1,7 @@ +#include "say-hello.h" +#include + +int main() { + SayHello("gopher"); + return 0; +} diff --git a/examples/ch2-07/hello-so/main.go b/examples/ch2-07/hello-so/main.go new file mode 100644 index 0000000..d95e599 --- /dev/null +++ b/examples/ch2-07/hello-so/main.go @@ -0,0 +1,11 @@ +package main + +import "C" +import "fmt" + +func main() {} + +//export SayHello +func SayHello(name *C.char) { + fmt.Printf("hello %s!\n", C.GoString(name)) +} diff --git a/examples/ch2-07/hello-so/say-hello.h b/examples/ch2-07/hello-so/say-hello.h new file mode 100644 index 0000000..0446c5c --- /dev/null +++ b/examples/ch2-07/hello-so/say-hello.h @@ -0,0 +1,60 @@ +/* Created by "go tool cgo" - DO NOT EDIT. */ + +/* package command-line-arguments */ + +/* Start of preamble from import "C" comments. */ + + + + +/* End of preamble from import "C" comments. */ + + +/* Start of boilerplate cgo prologue. */ +#line 1 "cgo-gcc-export-header-prolog" + +#ifndef GO_CGO_PROLOGUE_H +#define GO_CGO_PROLOGUE_H + +typedef signed char GoInt8; +typedef unsigned char GoUint8; +typedef short GoInt16; +typedef unsigned short GoUint16; +typedef int GoInt32; +typedef unsigned int GoUint32; +typedef long long GoInt64; +typedef unsigned long long GoUint64; +typedef GoInt64 GoInt; +typedef GoUint64 GoUint; +typedef __SIZE_TYPE__ GoUintptr; +typedef float GoFloat32; +typedef double GoFloat64; +typedef float _Complex GoComplex64; +typedef double _Complex GoComplex128; + +/* + static assertion to make sure the file is being used on architecture + at least with matching size of GoInt. +*/ +typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1]; + +typedef struct { const char *p; GoInt n; } GoString; +typedef void *GoMap; +typedef void *GoChan; +typedef struct { void *t; void *v; } GoInterface; +typedef struct { void *data; GoInt len; GoInt cap; } GoSlice; + +#endif + +/* End of boilerplate cgo prologue. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +extern void SayHello(char* p0); + +#ifdef __cplusplus +} +#endif