golang学习之cgo

lmspace · · 501 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

 

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"

 

 

本文来自:开源中国博客

感谢作者:lmspace

查看原文:golang学习之cgo

501 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet