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

HarmonyOS 应用开发,如何引入 Golang 编译的第三方 SO 库

本指南基于笔者临时修复的 ohos_golang_go 项目fork,解决HO 应用导入 cgo编译产物时的 crash 问题。

1. 下载 ohos_golang_go

git clone https://gitcode.com/deslord/ohos_golang_go.git

📌 该仓库为笔者临时修复版本,修复了 CGO 编译模式下 HO 应用导入 Go 编译产物时的崩溃问题。


2. 下载 Go 1.20.7(或更高版本)

你可以进入 Go 官方下载页面 手动下载,或直接运行以下命令:

wget https://go.dev/dl/go1.20.7.linux-amd64.tar.gz
sudo tar -xzf go1.20.7.linux-amd64.tar.gz

3. 配置 GOROOT_BOOTSTRAP 环境变量

编辑 ~/.bashrc 文件:

vim ~/.bashrc

加入以下内容(假设解压目录为 /home/lxl/go):

export GOROOT_BOOTSTRAP=/home/lxl/go

保存后使配置生效:

source ~/.bashrc

4. 编译 ohos_golang

cd ohos_golang_go/src
./make.bash

5. 配置系统 Go 环境变量

编辑 ~/.bashrc 文件:

vim ~/.bashrc

加入以下内容(替换 <你的ohos_golang_go目录地址> 为实际路径):

export GOROOT=<你的ohos_golang_go目录地址>
export PATH=$GOROOT/bin:$PATH

保存后使配置生效:

source ~/.bashrc

6. 验证配置是否成功

运行以下命令检查:

which go
go env GOROOT
go version

确认输出路径和版本信息正确。


8. 应用编译

a. 安装 HarmonyOS ARM 编译工具

访问华为开发者联盟官网。

  1. 登录 华为开发者联盟(需注册账号)。
  2. 进入 “开发” > “下载”,查找 Command Line Tools 相关版本。
  3. 选择 Linux 版本(如 5.0.13.200)进行下载并解压:
unzip commandline-tools-linux-x64-5.0.13.200.zip
  1. 设置环境变量:
vim ~./bashrc
export AR=/xxx/command-line-tools/sdk/default/openharmony/native/llvm/bin/llvm-ar
export CC=/xxx/command-line-tools/sdk/default/openharmony/native/llvm/bin/aarch64-unknown-linux-ohos-clang
export CXX=/xxx/command-line-tools/sdk/default/openharmony/native/llvm/bin/aarch64-unknown-linux-ohos-clang++
export GOOS=openharmony
export GOARCH=arm64
export CGO_ENABLED=1

b. 使用 cgo 模式编译 .so 文件

go build -a -buildmode=c-shared -o libgoadd.so -x main.go

9. 引入so到HarmonyOS应用

接下来实战展示如何引入cgo到HarmonyOS应用,该流程与HarmonyOS-native一致
ps:如何引入三方so可参考官方文档
Native侧引用三方so库
demo代码的go部分(一个简单的add函数)如下:

package mainimport "C"//export GolangAdd
func GolangAdd(a, b C.int) C.int {return a + b
}
func main(){}

a. 编译产物拷贝

在这里插入图片描述

b. 编辑CMakeList.txt, 配置动态库链接

target_link_libraries(entry PUBLIC ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libgoadd.so)

在这里插入图片描述

c.引用cgo方法

在这里插入图片描述

d.在arkts层调用native方法验证

在这里插入图片描述
在这里插入图片描述
demo代码参考

相关文章:

HarmonyOS 应用开发,如何引入 Golang 编译的第三方 SO 库

本指南基于笔者临时修复的 ohos_golang_go 项目fork&#xff0c;解决HO 应用导入 cgo编译产物时的 crash 问题。 1. 下载 ohos_golang_go git clone https://gitcode.com/deslord/ohos_golang_go.git&#x1f4cc; 该仓库为笔者临时修复版本&#xff0c;修复了 CGO 编译模式下…...

Axure元件动作六:设置图片

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 案例视频: Axure元件动作:设置图片 课程主题:设置图片 主要内容:图片悬停、鼠标按下时、选中...

一体化雷达波明渠流量计简介

一、技术定义与核心原理 一体化雷达波明渠流量计是基于微波技术的全自动流量监测设备&#xff0c;采用 24G K 波段平面雷达技术&#xff0c;通过非接触式测量方式实现对明渠、河道、排水管网等场景的水位、流速及流量监测。其核心原理是利用雷达发射高频电磁波&#xff0c;经水…...

Pr -- 耳机没有Pr输出的声音

问题 很久没更新视频号了&#xff0c;想用pr剪辑一下&#xff0c;结果使用Pr打开后发现耳机没有Pr输出的声音 解决方法 在编辑--首选项-音频硬件中设置音频硬件的输出为当前耳机设备...

白皮精读:2024年国家数据基础设施建设指引【附全文阅读】

《国家数据基础设施建设指引》提出建设覆盖数据采集至安全全链条的新型基础设施,目标到 2029 年形成横向联通、纵向贯通的格局,聚焦数据可信流通、算力协同、高速传输、安全保障四大功能,明确技术架构与重点方向,强调政府与市场协同,分阶段推进试点及规模化部署,为数字中…...

【信息系统项目管理师】第21章:项目管理科学基础 - 23个经典题目及详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1~2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第21题】…...

Mocha-Webpack 使用教程

Mocha-Webpack 使用教程 mocha-webpackmocha test runner with integrated webpack precompiler项目地址:https://gitcode.com/gh_mirrors/mo/mocha-webpack 项目介绍 Mocha-Webpack 是一个结合了 Mocha 和 Webpack 的测试工具&#xff0c;它允许开发者在使用 Webpack 打包的…...

AI硬件革命:OpenAI“伴侣设备”——从概念到亿级市场的生态重构

2025年5月23日&#xff0c;OpenAI宣布以65亿美元全股收购苹果前首席设计师Jony Ive创立的AI硬件公司io&#xff0c;并计划于2026年底前推出首款“AI伴侣设备”&#xff0c;目标出货量达1亿台。这一消息迅速成为全球AI领域的热点&#xff0c;标志着AI技术从云端大模型向端侧硬件…...

穿屏技巧:Mac-Windows一套鼠标键盘控制多台设备 (sharemouse6.0-Keygen)| KM-401A

文章目录 引言I sharemouse6.0介绍功能介绍关闭自动更新安装包II 安装系统对应的sharemouse软件Windowsmac版本III 知识扩展:SCP、FTP、SSH文件传输SCP配置SSH密钥免密登录FTP(File Transfer Protocal,文件传输协议)引言 基于USB进行同步键盘和鼠标事件,更流畅。 基于局域…...

【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化

目录 前言 一、空间检索简介 1、空间表结构 2、四至空间检索 二、前后端实现 1、后端实现 2、前端集成 三、成果展示 1、东部省份 2、西部省份 3、南部省份 4、北部省份 5、中部省份 四、总结 前言 在当今数字化时代&#xff0c;地理信息数据的分析与可视化对于众…...

【C/C++】线程状态以及转换

文章目录 线程状态以及转换1 基本状态1.1 新建&#xff08;New&#xff09;1.2 就绪&#xff08;Ready / Runnable&#xff09;1.3 运行中&#xff08;Running&#xff09;1.4 阻塞/等待&#xff08;Blocked / Waiting / Sleeping&#xff09;1.5 挂起&#xff08;Suspended&am…...

从零开始:Python语言进阶之异常处理

一、认识异常&#xff1a;程序运行中的“意外事件” 在编写Python程序时&#xff0c;即使代码语法完全正确&#xff0c;运行过程中也可能遭遇各种意外情况。这些意外被称为异常&#xff0c;它们会打断程序的正常执行流程。例如&#xff0c;当我们尝试打开一个不存在的文件、用0…...

关于vue彻底删除node_modules文件夹

Vue彻底删除node_modules的命令 vue的node_modules文件夹非常大,常规手段根本无法删除. 解决方法: 在node_modules文件夹所在的路径运行命令窗口,并执行下面的命令. npm install rimraf -g rimraf node_modules说明&#xff1a; npm install rimraf -g 该命令是安装 node…...

如何制作可以本地联网搜索的MCP,并让本地Qwen3大模型调用搜索回答用户问题?

环境: SearXNG Qwen3-32B-FP8 vllm 0.8.5 问题描述: 如何制作可以本地联网搜索的MCP,并让本地Qwen3大模型调用搜索回答用户问题? 解决方案: 一、安装searxng 1.按需新建模型相关文件夹 mkdir MCP chmod 777 /mnt/program/MCP2.配置conda源 nano ~/.condarc nano…...

服务器硬盘虚拟卷的处理

目前的情况是需要删除逻辑卷&#xff0c;然后再重新来弄一遍。 数据已经备份好了&#xff0c;所以不用担心数据会丢失。 查看服务器的具体情况 使用 vgdisplay 操作查看服务器的卷组情况&#xff1a; --- Volume group ---VG Name vg01System IDFormat …...

一个国债交易策略思路

该国债交易策略的核心在于通过分析历史价格数据来识别市场趋势&#xff0c;并在趋势确认时进行开仓操作。策略的设计思路结合了价格波动范围的计算和市场波动性的评估&#xff0c;旨在捕捉市场的短期趋势并控制风险。 首先&#xff0c;策略通过对过去5根K线的最高价和最低价进行…...

Linux常用下载资源命令

wget命令 基本用法 wget -O http://example.com/file.zip-O 参数表示将文件保存为原始文件名。 如果需要指定文件名&#xff0c;可以使用 -o 参数&#xff1a; wget -o custom_name.zip http://example.com/file.zip-P &#xff1a;指定下载文件的保存路径。 wget -P /path/…...

Go语言爬虫系列教程(三)HTML解析技术

第3课&#xff1a;HTML解析技术 在上一章中&#xff0c;我们使用正则表达式提取网页内容&#xff0c;但这种方法有局限性。对于复杂的HTML结构&#xff0c;我们需要使用专门的HTML解析库。下面将介绍如何在Go中解析HTML。 1. HTML DOM树结构介绍 1.1 什么是DOM DOM&#xf…...

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球 文章目录 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球前言高斯函数一维高斯多维高斯 椭球基本定义一般二次形式 3D高斯椭球3D高斯与椭球的关系各向同性(Isotropic)和…...

“夹子音”的发声原理和潜在风险

关于“夹子音”的发声原理和潜在风险&#xff0c;以下从科学角度和声乐实践出发&#xff0c;为你详细解析&#xff1a; 一、什么是夹子音&#xff1f; 夹子音是近年来网络流行的非专业术语&#xff0c;指通过刻意挤压喉部、改变共鸣腔形态发出的 尖细、嗲气、幼态化 的声音。常…...

思科硬件笔试面试题型解析

本专栏预计更新60期左右。当前第13期 这个系列通过在各类网上搜索大厂公开的笔试和面试题目,然后构造相关的知识点矩阵,让大家对核心的知识点有更深的认识,这个过程虽然耗时费力,但大厂的很多题目(包括模拟题)确实非常巧妙,很有代表性。由于官方没有发布过这样的题库,所…...

手写ES6 Promise() 相关函数

手写 Promise() 相关函数&#xff1a; Promise()、then()、catch()、finally() // 定义三种状态常量 const PENDING pending const FULFILLED fulfilled const REJECTED rejectedclass MyPromise {/*定义状态和结果两个私有属性:1.使用 # 语法&#xff08;ES2022 官方私有字…...

Windows 平台 TCP 通信开发指南

开篇介绍 在 Windows 平台进行 TCP 通信开发&#xff0c;是网络编程中的常见需求。本文将详细讲解在 Windows 平台下&#xff0c;如何利用 Winsock API 实现高效的 TCP 客户端与服务端通信。 使用示例 必须引入的头文件 #include <windows.h> #pragma comment(lib,&q…...

【NLP 76、Faiss 向量数据库】

压抑与痛苦&#xff0c;那些辗转反侧的夜&#xff0c;终会让我们更加强大 —— 25.5.20 Faiss&#xff08;Facebook AI Similarity Search&#xff09;是由 Facebook AI 团队开发的一个开源库&#xff0c;用于高效相似性搜索的库&#xff0c;特别适用于大规模向…...

软件名称:系统日志监听工具 v1.0

软件功能&#xff1a;一款基于 PyQt5 开发的 Windows 系统日志监听工具&#xff0c;适用于系统运维、网络管理、故障排查等场景&#xff0c;具备以下核心功能&#xff1a; 支持监听系统三大日志源&#xff1a;应用程序 / 系统 / 安全日志实时抓取新日志事件&#xff0c;自动滚…...

Spring AI 之结构化输出转换器

截至 2024 年 2 月 5 日,旧的 OutputParser、BeanOutputParser、ListOutputParser 和 MapOutputParser 类已被弃用,取而代之的是新的 StructuredOutputConverter、BeanOutputConverter、ListOutputConverter 和 MapOutputConverter 实现类。后者可直接替换前者,并提供相同的…...

Java虚拟机面试题:内存管理(上)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

进程间通信I·匿名管道

目录 进程间通信&#xff08;IPC&#xff09; 含义 目的 分类 匿名管道 原理 创建过程 特性 四大情况 close问题 代码练习 简单通信 进程池 小知识 进程间通信&#xff08;IPC&#xff09; 含义 就是让不同的进程能看到同一份资源&#xff0c;实现数据交流。 …...

Ubuntu Linux系统的基本命令详情

1.Ubuntu Linux是以桌面应用为主的Linux发行版操作系统 2.Ubuntu的用户使用 在登录系统一般使用在安装系统时建立的普通用户登录&#xff0c;如果要使用超级用户权限 #sudo ---执行命令 sudo passwd ---修改用户密码 su - root ---切换超级用户 系统的不同&#xff0c;命令也不…...

大数据治理:理论、实践与未来展望(二)

书接上文 文章目录 七、大数据治理的未来发展趋势&#xff08;一&#xff09;智能化与自动化&#xff08;二&#xff09;数据隐私与安全的强化&#xff08;三&#xff09;数据治理的云化&#xff08;四&#xff09;数据治理的跨行业合作&#xff08;五&#xff09;数据治理的生…...