赞
踩
1.查看cgo是否开启
- go env | grep CGO_ENABLED
- CGO_ENABLED='1'
2. go程序中加入 import "C"
通过 import “C” 语句启用 CGO 特性后,CGO 会将上一行代码所处注释块的内容视为 C 代码块
3. go 与C 类型转换
在go安装目录 src\cmd\cgo 中定义
- func C.CString(string) *C.char
- func C.CBytes([]byte) unsafe.Pointer
- func C.GoString(*C.char) string
- func C.GoStringN(*C.char, C.int) string
- func C.GoBytes(unsafe.Pointer, C.int) []byte
GO语言与C语言的数据类型对应表
3. 直接在go文件中使用函数
- package main
-
- /*
- #include <stdio.h>
- int printHello(const char *str){
- printf("%s\n",str);
- return 3;
- }
- */
- import "C"
- import (
- "fmt"
- )
-
- func main() {
- fmt.Println("Hello World!")
- fmt.Println(C.printHello(C.CString("nihao")))
- }
4.使用动态库
myprint.c
- #include "myprint.h"
- #include <stdio.h>
- int printHello(const char *str){
- printf("%s\n",str);
- return 3;
- }
myprint.h
- #ifndef __MYPRINTF_H
- int printHello(const char *str);
- #endif
编译动态库
gcc -fPIC -shared -o libmyprint.so myprint.c
将编译后的动态库拷贝至系统lib路径 ,或者自定义路径下 然后修改/etc/ld.so.conf
执行ldconfig
使用动态库序号包含3行
#cgo CFLAGS: -ImyLibIncPath
#cgo LDFLAGS: -LmyLibIncPath -lmyprint
#include "myprint.h"
- package main
-
- /*
- #cgo CFLAGS: -I./
- #cgo LDFLAGS: -L./ -lmyprint
- #include "myprint.h"
- */
- import "C"
- import (
- "fmt"
- )
-
- func main() {
- fmt.Println("Hello World!")
- fmt.Println(C.printHello(C.CString("nihao")))
- }
5.go与c数据转换可以参考
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。