【发布时间】:2018-06-27 07:59:21
【问题描述】:
更新:这个问题已经解决了。我正在重新编辑问题以更新到固定状态。
我正在尝试编写一个配方,该配方使用dep 工具在构建之前解决go 相关项目的依赖关系。我正在使用“rocko”Yocto 项目分支的“poky”层。该分支提供了构建 go 编译器和 dep 依赖项工具的方法。
我的初始配方从 bitbucket 存储库中获取源代码:
GO_IMPORT = "bitbucket.org/path/to/my_project"
SRC_URI = "git://${GO_IMPORT}/protocol=http;user=${GIT_USER}:${GIT_PASS};destsuffix=${PN}-${PV}/src/${GO_IMPORT}"
然后我添加这个:
inherit go
DEPENDS += "go-dep"
在我添加这个函数之后:
do_compile_prepend() {
dep init
dep ensure
}
Yocto 抱怨这个错误:
run.do_compile.8543: line 118: dep: command not found
阅读下面的一些答案后,我在 poky/meta/recipes-devtools/go/go-dep_0.3.0.bb 配方文件末尾的答案中添加了建议的补丁 - 非常感谢!! :-)
BBCLASSEXTEND = "native nativesdk"
在我执行了一些 bitbake 命令之后:
$ bitbake -c cleanall go-dep-native
$ bitbake go-dep-native
Bitbake 过程正常结束,没有显示错误或警告。原生 go-dep 工具已内置到 tmp/work/x86_64-linux/go-dep-native 目录中,并正确安装到 tmp/sysroots-components/x86_64/go-dep-native/usr/bin 中。
我修改do_compile_prepend()函数如下图:
do_compile_prepend() {
rm -f ${WORKDIR}/build/src/${GO_IMPORT}/Gopkg.toml
rm -f ${WORKDIR}/build/src/${GO_IMPORT}/Gopkg.lock
cd ${WORKDIR}/build/src/${GO_IMPORT}
dep init
dep ensure
}
我在我的食谱中这样修改 DEPENDS:
DEPENDS = "go-native go-dep-native"
请注意,go-dep 已被删除(我不需要目标设备上的dep 工具,只是为了解决对本机平台的依赖关系)。
之后,我执行这个命令:
$ bitbake <foo>
do_compile 阶段工作正常,但是 do_package 阶段出现一些错误:
ERROR: <foo>-1.0-r0 do_package: QA Issue: File '/usr/bin/dep' from <foo> was already stripped, this will prevent future debugging! [already-stripped]
ERROR: <foo>-1.0-r0 do_package: Fatal QA errors found, failing task.
ERROR: <foo>-1.0-r0 do_package: Function failed: do_package
这些错误已修复,在我的食谱末尾附加以下内容:
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"
RDEPENDS_${PN}-staticdev += "bash"
RDEPENDS_${PN}-dev += "bash"
我不知道这是否是解决我的问题的最佳方法,但至少现在可以正常工作。任何改进这个食谱的建议都是受欢迎的。先感谢您! :-)
【问题讨论】:
-
我不熟悉 yocto 但通常使用 go-dep(或一般的 go 命令),当它们通过
go get github.com/golang/dep/cmd/dep命令获得时,可执行的dep命令将进入 $GOPATH /bin 目录,所以我认为您需要将 $GOPATH/bin 添加到您的 PATH 环境变量中,以便可以找到该命令。 -
或者,如果您无法更改 PATH 变量,您可以随时将 do_compile_prepend 更改为
$GOPATH/bin/dep init
标签: go dependencies yocto recipe