本指南基于笔者临时修复的 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 编译工具
访问华为开发者联盟官网。
- 登录 华为开发者联盟(需注册账号)。
- 进入 “开发” > “下载”,查找 Command Line Tools 相关版本。
- 选择 Linux 版本(如
5.0.13.200
)进行下载并解压:
unzip commandline-tools-linux-x64-5.0.13.200.zip
- 设置环境变量:
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 main
import "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)