• Lv0
    粉丝0

积分7 / 贡献0

提问2答案被采纳0文章0

作者动态

CGO的应用或动态库,无法在设备上跑起来,非CGO可以,但中文显示乱码

kangduola 显示全部楼层 发表于 2023-12-20 14:47:12
package main
/*
#include <stdio.h>

int add( int a, int b )
{
return a + b;
}
*/
import "C"
import (
"fmt"
)

func main() {
fmt.Println( "CGO 32" )
fmt.Println( "我爱中国" )

ret := int( C.add( 666, 888 ) )

fmt.Printf( "ret:%d\r\n", ret )
}

这个是CGO代码,用ohos编译器可编译出执行程序,但是在设备上运行后崩了,反馈Signal 11。去掉C元素后编译,运行正常,但是“我爱中国”显示乱码。

期望:

OpenHarmony系统支持CGO,即Go的应用和Go编译的动态库。

如何复现该缺陷

go env -w GOOS=linux go env -w CGO_ENABLED=1 go env -w GOARCH=arm go env -w GOARCH=arm go env -w CC="/opt/ohos-sdk/linux/native/llvm/bin/clang --target=arm-linux-ohos" go env -w CXX="/opt/ohos-sdk/linux/native/llvm/bin/clang++ --target=arm-linux-ohos" go env -w CGO_LDFLAGS="--target=arm-linux-ohos"

编译环境变量设置举例,用CGO应用在设备上加权限后执行

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

深开鸿_王石

沙发 发表于 2023-12-28 21:05:08
signal11是可以在/data/log/faultlog里看到cppcrash的log的,你可以贴出来看看;大概率分析是cgo用gcc编译可能引入了些glib的库,这有license原因,ohos里用的是muslc;然后中文的原因应该是编码问题了,用UTF8就好了

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部