C/C++语言调用Go库

C/C++语言调用Go库

编译go代码为动态库/静态库

Go语言写的代码可以编译为动态库或静态库,之后C语言链接该动态库或静态库就可以调用Go语言写的代码。下面用ubuntu20.04下的操作方法来演示。

新创建一个文件夹,编写一个属于main包的go语言代码文件a.go如下:

package main;
 
import "C"
 
func main() {}
 
//export Hello
func Hello() string {
    return "Hello"
}
 
//export Print_a
func Print_a() {
    println("aaaaa")
}

然后可以用下面的命令编译成动态库:
在这里插入图片描述之后可以看到go编译器生成的liba.so动态库文件。

或者用下面的命令编译成静态库:
在这里插入图片描述
之后可以看到go编译器生成的liba.a和liba.h静态库文件

使用静态库

之后如果使用静态库的话,将静态库放到需要使用库的C语言源代码的同一目录下。假设C语言的代码(test.c)如下:

#include <stdio.h>
#include "liba.h"
 
void main()
{
    GoString str;
    str = Hello();   
    Print_a();
    printf("%d\n",(int)str.n);
}

使用静态库时,编译命令与结果如下:
在这里插入图片描述
运行:
在这里插入图片描述
这样就成功实现了C语言使用静态库中的go函数。

使用动态库

之后如果使用动态库的话,假设C语言的代码(test.c)仍然如下:

#include <stdio.h>
#include "liba.h"
 
void main()
{
    GoString str;
    str = Hello();   
    Print_a();
    printf("%d\n",(int)str.n);
}

如果用动态库链接需要将当前编译后动态库所在路径加到 L D L I B R A R Y P A T H 中 再 运 行 程 序 , 或 者 将 当 前 编 译 的 动 态 库 放 入 LD_LIBRARY_PATH中再运行程序,或者将当前编译的动态库放入 LDLIBRARYPATHLD_LIBRARY_PATH路径下。

在这里插入图片描述
编译结果:
在这里插入图片描述
运行结果:
在这里插入图片描述
这样就成功实现了C语言使用动态库中的go函数。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值