当前位置: 首页 > 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 语言中调用这些功能。

相关文章:

  • 数据结构实验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页面 论坛 网盘的搭建
  • 架构思维:通用架构模式_怀疑下游的设计思路与最佳实践
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名
  • 沙县小吃中东首店在沙特首都利雅得开业,首天营业额超5万元
  • 云南大理铁路枢纽工程建设取得两大进展,预计明年建成
  • 美元指数上涨超1%重返101上方,创1个月新高