【问题标题】:how to manage external dependencies of a golang project in a yocto recipe如何在 yocto 配方中管理 golang 项目的外部依赖项
【发布时间】:2021-01-26 17:24:37
【问题描述】:

我想用 Yocto 2.4.1 为交叉编译的 golang 应用程序编写一个 yocto 配方,但我无法让外部依赖项工作。 谁能帮帮我?

current RECIPE_FILE: hello-world_%.bb
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""
DESCRIPTION = "Hello world test with golang."

inherit go

COMPATIBLE_MACHINE = "(<machine>)"
DEPENDS = "go-cross-${TARGET_ARCH}"
GO_IMPORT = "hello-world"
SRC_URI = "<git_url>/${GO_IMPORT}.git;branch=${SRCBRANCH};tag=${PV}" 
SRCBRANCH = "master"
PV = "0.01"
S = "${WORKDIR}/git"

do_compile() {
  export GOPATH="${WORKDIR}/build"
  export GOARCH="<machine_arch>"
  export GOOS="linux"
  export CGO_ENABLED="0"
  go build src/${GO_IMPORT}/hello-world.go
}

 do_install() {
   install -d "${D}/${bindir}"
   install -m 0755 "${WORKDIR}/build/hello-world" "${D}/${bindir}/hello-world"
 }

RDEPENDS_${PN}-dev += "bash"

此配方仅适用于内部依赖项。但是如何集成“github.com/golang/protobuf/ptypes”之类的外部依赖项?

PROJECT_FILE: hello-world.go

package main

import (
    "fmt"
    "github.com/golang/protobuf/ptypes"
)

func main() {
    timestamp := ptypes.TimestampNow()
    fmt.Println(timestamp)
}

有人知道这个用例的解决方案吗?

或者有谁知道“go-dep”如何处理这个问题?

最好的问候

【问题讨论】:

标签: go dependency-management yocto recipe


【解决方案1】:

我使用 go dep 作为 deps,这是一个示例。最大的问题是代理问题,在配方中也解决了这个问题:

inherit go

LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""
DESCRIPTION = "Hello world test with golang."

COMPATIBLE_MACHINE = "(<machine>)"
DEPENDS += "go-dep-native"
GO_LINKSHARED = ""

GO_IMPORT = "<git_url>/hello-world.git"
SRC_URI = "<git_url>/${GO_IMPORT}.git;branch=${SRCBRANCH};tag=${PV}" 
SRCBRANCH = "master"

do_compile() {
    export SSH_AUTH_SOCK="${SSH_AUTH_SOCK}"
    export HTTP_PROXY="${HTTP_PROXY}"
    ( cd ${WORKDIR}/build/src/${GO_IMPORT} && dep ensure -v )
}

do_compile[vardepsexclude] += "SSH_AUTH_SOCK HTTP_PROXY"

do_install() {
    install -d "${D}/${bindir}"
    install -m 0755 "${WORKDIR}/bin/<arch>/hello-world" "${D}/${bindir}/hello-world"
}

【讨论】:

    【解决方案2】:

    我相信只有两种类型的依赖
    1.host依赖(yocto中app编译时的依赖)
    在 yocto recipe(.bb 文件) 中保留DEPENDS = "some lib"

    1. 目标依赖项(应用程序运行时的依赖项)
      你的 yocto 食谱RDEPENDS = "some lib"

    你好.bb

    DESCRIPTION =  
    LIC =  
    SRC_URI =  
    DEPENDS ="sqlite3"   
    inherit autools
    

    【讨论】:

    • 感谢回复,不过我觉得go依赖不能在那里处理。
    【解决方案3】:

    您可以使用 SRC_URI 添加外部 go 依赖项:

    SRC_URI = "\
               <git_url>/${GO_IMPORT}.git;branch=${SRCBRANCH};tag=${PV} \
               git://github.com/golang/protobuf/ptypes;protocol=https;name=ptype;destsuffix=${PN}-${PV}/src/github.com/golang/protobuf/ptypes \
    "
    
    SRCREV_ptype = "v0.1.0" <-- whatever revision you need (branch, tag, sha)
    
    

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2019-06-02
      • 2012-06-03
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      相关资源
      最近更新 更多