golang学习之cgo
golang学习之cgo
Hello-李蒙 发表于9个月前
golang学习之cgo
  • 发表于 9个月前
  • 阅读 50
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

摘要: cgo踩到的坑

 

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"

 

 

标签: golang cgo liteide
共有 人打赏支持
粉丝 2
博文 3
码字总数 631
×
Hello-李蒙
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: