CGo

一、cgo

1.1 go调用c函数

知识点:

  1. /* */之间的是C代码。
  2. C代码和 import "C"之间不能有空格,否则会报错。
  3. import "C"必须单独一行,不能和其他的import写在一起。

代码:

package main

/*
#include <stdint.h>

static int32_t add(int32_t a, int32_t b) {
        return a + b;
}
*/
import "C"

import (
        "fmt"
)

func main() {
        var a, b int32 = 10, 20
        var c int32 = int32(C.add(C.int32_t(a), C.int32_t(b)))
        fmt.Println(c)
}

运行结果:

[root@bogon 09]# go run test.go 
30

1.2 go调用c静态库

代码:
hello.h:

extern int hello(char *name, int age);

hello.c:

#include <stdio.h>
#include "hello.h"

int hello(char *name, int age) {
        printf("hello %s, your age is %d\n", name, age);
        return age;
}

test.go:

package main

/*
#include <stdio.h>
#include <stdlib.h>
#include "hello.h"

#cgo CFLAGS: -I.

#cgo LDFLAGS: -L. -lhello
*/
import "C"

import (
        "fmt"
        "unsafe"
)

func main() {
        name := C.CString("Tom")
        defer C.free(unsafe.Pointer(name))

        age := C.int(18)

        result := C.hello(name, age)
        fmt.Println(result)
}

编译c代码为静态库:

gcc -Wall -c hello.c
ar -rv libhello.a hello.o

运行结果:

[root@bogon 09]# go run test.go 
hello Tom, your age is 18
18

参考资料:
Golang 通过 cgo 调用 C/C++ 静态库(一)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值