c/c++ 调用golang 方法

example:

go

package main

import "C"

//export foo
func foo(a, b int) int {
	return a + b
}

func main() {}

1.需要引入 import “C”
2..//export foo 添加这条注释的原因:在编译动态库的时候,需要添加export funxxxx,才会生成对应的头文件
3.func main() {} 需要加入main, go语言问题,没有会编译报错

设置go 环境变量

通过go env 查看当前环境变量
在这里插入图片描述
查看CC 和 CXX的值,根据自己电脑环境设置c/c++ 编译器路径
设置方式

#永久生效方式
go env -w CC=
go env -w CXX=
go env -w AR=
go env -w CGO_ENABLED=1
#临时终端生效 linux
export CC=
export CXX=
export AR=
export CGO_ENABLED=1
#windows 
set CC=
set CXX=
set AR=
set CGO_ENABLED=1

在windows中碰到的问题
runtime/cgo: cgo.exe: exit status 2.

不能直接指定CC 和 CXX 的绝对路径,需要在系统的环境变量设置编译器路径
在这里插入图片描述
在这里插入图片描述

编译动态库

go build -buildmode=c-shared -o libxxx.so xxx.go
#减小动态库体积(省略符号表和调试信息,禁止生成 DWARF 调试信息)
go build -buildmode=c-shared -ldflags="-s -w" -o libxxx.so xxx.go 

C/C++

#include <iostream>
#include "libxxx.h"

int main() {
    std::cout << foo(10,5) << std::endl;
    return 0;
}

编译

g++ main.cpp -lxxx
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐