golang学习之cgo
lmspace · · 5466 次点击 · · 开始浏览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"
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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"