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

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.xdnf.cn/news/5421.html

相关文章:

  • linux--------------Ext系列⽂件系统(下)
  • QOwnNotes:功能强大的跨平台笔记应用程序
  • FreeRTOS静态任务的创建、删除和软件定时器的开启(尚硅谷学习笔记)
  • 监控易一体化运维:任务计划管理的关键作用
  • 王道计算机网络知识点总结
  • 动态路由实现原理及前端控制与后端控制的核心差异
  • Linux:43线程封装与互斥lesson31
  • 前端Web开发HTML5+CSS3+移动web(基础-flex)
  • 基于Python的网络电子书阅读系统
  • 在Python中计算函数耗时并超时自动退出
  • 英语听力口语词汇--2.宣传类
  • 【时时三省】(C语言基础)字符数组
  • 关于TIAV20 PLCSIM仿真错误的原因
  • java中的io流
  • 专题一:汉诺塔问题:递归算法的精妙解析
  • PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)
  • 【LwIP源码学习6】UDP部分源码分析
  • [思维模式-28]:《本质思考力》-8- 两种相反的构建与解构系统的思维模式:①自顶向下的分解、牵引;②自底向上的堆叠、聚合
  • 深入剖析 MyBatis 位运算查询:从原理到最佳实践
  • AI文字识别工具汇总
  • 控制LED灯设备
  • Linux epoll 详解:概念、使用、数据结构、流程及应用
  • C++:友元
  • CSS 基础知识分享:从入门到注意事项
  • 50.辐射抗扰RS和传导抗扰CS测试环境和干扰特征分析
  • Vue:生命周期钩子
  • 海上风电场数字孪生,可视化智慧运维
  • 20242817李臻《Linux⾼级编程实践》第9周
  • 鸿蒙开发RelativeContainer自适应高度
  • HTTP3详解