package main
/*
#include <stdio.h>
#include <stdlib.h>
*/
import "C"
import "unsafe"
func main() {
cstr := C.CString("HELLO, WORLD")
C.puts(cstr)
C.free(unsafe.Pointer(cstr))
}
说说我遇到的坑吧
虽然go在格式上要求严格,但是有些地方真的不是很人性化,不知道是我的操作有问题,还是怎么,哎
注意:
我使用的ide是liteide,写完代码尝试编译好几次,都报错,报错如下:
# testGcc
could not determine kind of name for C.free
could not determine kind of name for C.puts
这里需要注意的是:
/*
#include <stdio.h>
#include <stdlib.h>
*/
import "C"
import "unsafe"
import “C” 与上面的C代码不能有多余的空行,并且 import “C” 必须是 第一个导入。
还有一个问题,当我们需要依赖一个非C标准库呢?如果按照上述方法的话,会有链接错误。
解决方法:
1、第一种方法
/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lrtmp
#include <stdlib.h>
#include "rtmp.h"
*/
import "C"
2、第二种方法
/*
#cgo pkg-config: rtmp cairo
#include "rtmp.h"
*/
import "C"
有疑问加站长微信联系(非本文作者)