我正在使用Yocto Kirkstone为ARMv7定制嵌入式Linux板构建一个系统.我的Yocto meta层中有Go-Runtime版本1.20.

我正在try 构建一个简单的示例GoLang‘wails’(https://github.com/wailsapp/wails)应用程序,我可以在我的Mac上为我的目标构建它.这需要安装wails‘cli’来构建应用程序.我不确定如何将这款应用程序与Yocto交叉编译.我怎样才能做到这一点呢?谢谢.

此命令在do_Compile()中失败:

wails build .

我收到的错误如下所示:

...
| HASH[link github.com/wailsapp/wails/v2/cmd/wails]: "packagefile internal/lazyregexp=PNiPFusr6BDvpzrFOO2q\n"
| HASH[link github.com/wailsapp/wails/v2/cmd/wails]: 58443e84e42fc0e5254356b82561065095a39a1606a457c34cf63d8dd364173c
| HASH subkey a9f4ce5dc6a5c97cab06b5c8cfec3a64e5db0f7bcc79e02fc0002cafcc719a67 "link-stdout" = 80ee6464b934ca7407296396849147804b0862ee25e2b844a6e9cc98cfa588b3
| qemu-arm: Could not open '/lib/ld-linux-armhf.so.3': No such file or directory
| WARNING: /home/sensonix/poky/build-microchip/tmp/work/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi/go-example/1.0.0-r0/temp/run.do_compile.87405:178 exit 255 from './bin/linux_arm/wails build .'
| WARNING: Backtrace (BB generated script):
|       #1: do_compile, /home/sensonix/poky/build-microchip/tmp/work/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi/go-example/1.0.0-r0/temp/run.do_compile.87405, line 178
|       #2: main, /home/sensonix/poky/build-microchip/tmp/work/cortexa5t2hf-neon-vfpv4-poky-linux-gnueabi/go-example/1.0.0-r0/temp/run.do_compile.87405, line 186

Bitbake配方:

DESCRIPTION = "Wails Example App"
LICENSE = "CLOSED"
LIC_FILES_CHKSUM=""

SRC_URI = "file://wails.json"
SRC_URI += "file://README.md"
SRC_URI += "file://main.go"
SRC_URI += "file://app.go"
SRC_URI += "file://frontend"

GO_IMPORT = "import"
GO_LINKSHARED = ""
PTEST_ENABLED="0"
export GO111MODULE="auto"
CGO_ENABLED = "1"

inherit go goarch

do_compile() {

    cd ${WORKDIR}/build
    export TMPDIR="${GOTMPDIR}"

    ${GO} install github.com/wailsapp/wails/v2/cmd/wails@latest

    export GOPATH="$GOPATH:${S}/src/import/.gopath"

    # Pass the needed cflags/ldflags so that cgo
    # can find the needed headers files and libraries
    export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}"
    export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}"

    ./bin/linux_arm/wails build .

    #${GO} build ${GO_LINKSHARED} ${GOBUILDFLAGS} -o streamerapp

    cd ${OLDPWD}

}

do_install() {

    cd ${WORKDIR}/build
    #install -m <permisions> SRC DEST

    mkdir -p ${D}${bindir}
    #install -m 0755 ./wailsapp ${D}${bindir}

    cd ${OLDPWD}

}

推荐答案

我用下面的食谱解决了这个问题.

DESCRIPTION = "Wails Example App"
LICENSE = "CLOSED"
LIC_FILES_CHKSUM=""

LICENSE = "CLOSED"

SRC_URI = "git://git@github.com/abc/go-wails-demo.git;branch=master;protocol=ssh"
SRCREV = "eaa61c30bff997c811da1d176c7273cea4f6b7d8"

GO_IMPORT = "import"
GO_LINKSHARED = ""
PTEST_ENABLED="0"
CGO_ENABLED = "1"

DEPENDS = "nodejs-native"
DEPENDS += "gtk+3 webkitgtk"

INSANE_SKIP:${PN} += "already-stripped"

inherit go goarch pkgconfig

do_compile() {

    # Allow cloning of properietary repositories
    git config --global --add url."git@github.com:".insteadOf "https://github.com/"
    ${GO} env -w GOPRIVATE="github.com/abc"

    cd ${WORKDIR}/go-wails-demo-1.0.0/src/import
    export TMPDIR="${GOTMPDIR}"

    # Pass the needed cflags/ldflags so that cgo
    # can find the needed headers files and libraries
    export QEMU_LD_PREFIX="${STAGING_DIR_TARGET}"
    export GOARCH=${TARGET_GOARCH}
    export CGO_ENABLED="1"
    export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}"
    export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}"
    export GO111MODULE="on"
    export GOPATH="${WORKDIR}/build"
    export GIT_TERMINAL_PROMPT=1

    ${GO} install github.com/wailsapp/wails/v2/cmd/wails@latest

    /usr/bin/sync
    sleep 0.5

    ${WORKDIR}/build/bin/linux_arm/wails build .

}

do_install() {

    cd ${WORKDIR}/go-wails-demo-1.0.0/src/import/build/bin

    mkdir -p ${D}${bindir}
    install -m 0755 ./react-wails-demo ${D}${bindir}

    cd ${OLDPWD}

}

Go相关问答推荐

理解Golang并发:缓冲通道的意外行为

Golang Viper:如果第一个字段不存在,如何从另一个字段获取值

如何在围棋中从多部分.Part中获取多部分.文件而不保存到磁盘?

Kusto Go API 从多个表查询

使用golang sqlc中的引用参数

Go 中的 YAML 自定义标签

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

golang 上基于标头的版本控制

如何使用 go 包设置标头键和值:shurcooL/graphql 或 hasura/go-graphql-client?

判断一个区域内的纬度/经度点

当图像是对象数组的元素时,如何显示存储为页面资源的图像?

如何在 golang revel 中获取动态应用程序配置

对所有标志进行 ORing 的简短方法

在我的情况下,如何以正确的方式测试方法?

如何正确为 Go 中的值设置多种类型?

HCL 解码:具有多个标签的块

如何将实际上是类型为 reflect.Int32 的类型切片的 interface{} 转换为 int32 的切片?

AWS EKS 上的 Golang REST API 部署因 CrashLoopBackOff 而失败

在 etcd 键值存储中禁用历史记录

如何在 Go 中使用 RSA 密钥加密和解密纯文本?