golang学习之cgo

2017-01-07 23:00:12  lmspace
阅读 277 次  0 条评论  收藏

 

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

0条评论

文章点评:

(您需要 登录 后才能评论 没有账号 ?)
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet