当前位置: 首页 > news >正文

go程序编译成动态库,使用c进行调用

以下是使用 Go 语言打包成 .so 库并使用 C 语言调用的完整步骤:

1. Go 语言打包成 .so

(1)编写 Go 代码

创建一个 Go 文件(如 calculator.go),并定义需要导出的函数。导出的函数名必须以大写字母开头,并在函数前添加 //export 注释。

package mainimport "C"
import "fmt"//export Add
func Add(a, b int) int {return a + b
}func main() {}
(2)编译生成 .so

在终端中进入项目目录,运行以下命令:

go build -buildmode=c-shared -o libcalculator.so calculator.go

这将生成 libcalculator.so 文件,即打包好的动态链接库。

2. 使用 C 语言调用 .so

(1)编写 C 代码

创建一个 C 文件(如 main.c),并包含生成的头文件(calculator.h),调用导出的函数。

#include "calculator.h"int main() {int result = Add(10, 20);printf("Result: %d\n", result);return 0;
}
(2)编译和运行

在终端中运行以下命令:

gcc -o main main.c libcalculator.so
./main

运行结果应为:

Result: 30

注意事项

  1. 头文件:生成的 .so 库会附带一个对应的头文件(如 calculator.h),C 代码需要包含这个头文件。
  2. 路径问题:确保 .so 库文件的路径正确,或者将其路径添加到系统的 LD_LIBRARY_PATH 环境变量。
  3. 数据类型:Go 和 C 的数据类型需要匹配,例如 Go 的 int 对应 C 的 int

通过以上步骤,你可以将 Go 语言的功能封装为 .so 库,并在 C 语言中调用这些功能。

http://www.dtcms.com/a/184754.html

相关文章:

  • 数据结构实验9.2:动态查找表的基本操作
  • 机器学习总结
  • 操作系统原理实验报告
  • 常用的rerank模型有哪些?都有什么优势?
  • AI(学习笔记第三课) 使用langchain进行AI开发(2)
  • Java原生结合MQTTX---完成心跳对话(附带源码)
  • Linux 进程等待
  • 数字化工厂中央控制室驾驶舱系统 API接口文档
  • 洛谷题目:P1673 [USACO05FEB] Part Acquisition S 题解(本题简)
  • python【扩展库】websockets
  • C 语言报错 xxx incomplete type xxx
  • STM32f103 标准库 零基础学习之按键点灯(不涉及中断)
  • 二叉搜索树讲解
  • Funplus 服务端开发实习 面经
  • robomaster机甲大师--电调电机
  • Transformer Decoder-Only 算力FLOPs估计
  • 仿真生成激光干涉包裹相位数据-用于深度学习训练!
  • 【信息系统项目管理师】第3章:信息系统治理 - 29个经典题目及详解
  • RHCSA Linux系统 Web页面 论坛 网盘的搭建
  • 架构思维:通用架构模式_怀疑下游的设计思路与最佳实践
  • 基于 TSBS 标准数据集下 TimescaleDB、InfluxDB 与 TDengine 性能对比测试报告
  • 花朵识别系统Python+深度学习+卷积神经网络算法+TensorFlow+人工智能
  • MySQL的索引分类
  • CSS 基础知识分享:从入门到注意事项
  • 基础框架搭建流程指南
  • 如何获取达梦数据库的官方文档?
  • 温湿度传感器SHT4X
  • SpringBoot 自动装配原理 自定义一个 starter
  • 【并发编程】Redisson 的分布式锁
  • 设计模式系列(1):总览与引导