日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mediapipe bazel 编译问题

發布時間:2023/12/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mediapipe bazel 编译问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為某些原因要回退mediapipe 版本,但是bazel 編譯依賴很多倉庫的代碼已經更新了,所以編譯時出現了一些倉庫或者變量找不到的錯誤提示。下面整理一些解決方法。

分支更名

完整錯誤如下:

ERROR: An error occurred during the fetch of repository 'rules_foreign_cc':java.io.IOException: Error extracting /mnt/android_source/bazel_cache/_bazel_edison/bd6da075c4965688e2daae750238d36b/external/rules_foreign_cc/master.zip to /mnt/android_source/bazel_cache/_bazel_edison/bd6da075c4965688e2daae750238d36b/external/rules_foreign_cc: Prefix "rules_foreign_cc-master" was given, but not found in the archive. Here are possible prefixes for this archive: "rules_foreign_cc-main".

其實錯誤提示也比較明顯了“ Prefix “rules_foreign_cc-master” was given, but not found in the archive. Here are possible prefixes for this archive: “rules_foreign_cc-main”.”

這是由于zzzq 原因一些倉庫的“master” 分支更名為了“main” 分支。

我們在 WORKSPACE 文件中將 strip_prefix = "rules_foreign_cc-master"修改為strip_prefix = "rules_foreign_cc-main"就可以解決此類問題。

對應的url 不需要修改。

使用離線的依賴倉庫

重新執行編譯命令,有新的錯誤:

Repository rule http_archive defined at:/mnt/android_source/bazel_cache/_bazel_edison/bd6da075c4965688e2daae750238d36b/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: in <toplevel> ERROR: cannot load '@rules_foreign_cc//:workspace_definitions.bzl': no such file

翻譯一下就是 rules_foreign_cc 這個倉庫里面 workspace_definitions.bzl 文件不存在。

打開Github上的rules_foreign_cc 倉庫,果然這個文件不存在,但歷史上肯定是有的,不然當時不會這么寫這段代碼。通過將代碼切換到tag 0.2.0 之后,這個文件出現了,說明我們應該使用這個tag 對應的版本。我們可以選擇下載當前節點的倉庫,下載一個zip 包存到本機目錄,然后修改WORKSPACE 文件如下(git diff 展示):

http_archive(name = "rules_foreign_cc", - strip_prefix = "rules_foreign_cc-master", - url = "https://github.com/bazelbuild/rules_foreign_cc/archive/master.zip", + strip_prefix = "rules_foreign_cc-0.2.0", + urls = ["file:home/edison/Downloads/rules_foreign_cc-0.2.0.zip"],)

即:將網絡上的地址修改為本地地址。注意 strip_prefix 那里也要跟上tag 名,其實就是文件名不含后綴。

這種方法比較適用于編譯環境網絡不通,或者不想頻繁訪問網絡的條件下。

拉取依賴倉庫指定commit 節點的代碼

重新執行編譯新的錯誤又來了,不慌,看看是什么。

Repository rule http_archive defined at:/mnt/android_source/bazel_cache/_bazel_edison/bd6da075c4965688e2daae750238d36b/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: in <toplevel> ERROR: /mnt/android_source/bazel_cache/_bazel_edison/bd6da075c4965688e2daae750238d36b/external/rules_cc/cc/private/rules_impl/cc_flags_supplier.bzl:16:1: file '@bazel_tools//tools/cpp:toolchain_utils.bzl' does not contain symbol 'use_cpp_toolchain' (did you mean 'find_cpp_toolchain'?)

看樣子是文件存在,但是文件內容被修改了,不適當前版本編譯了。繼續使用回退大法。

只不過這次我們不下載倉庫了,畢竟步驟還是稍微繁瑣了一些,我們可以修改代碼取拉去對應倉庫指定commit 節點的代碼!

去GitHub 上的 rules_cc 倉庫找到對應文件,查看文件修改歷史,發現報錯提示“use_cpp_toolchain” 是最近修改的,那我們可以指定它的上一個節點編譯試試。

修改WORKSPACE 文件如下(git diff 展示)::

+_RULES_CC_GIT_COMMIT = "f95239adde29680236afa22b4abaf1d04234f61a"http_archive(name = "rules_cc", - strip_prefix = "rules_cc-master", - urls = ["https://github.com/bazelbuild/rules_cc/archive/master.zip"], + strip_prefix = "rules_cc-%s" % _RULES_CC_GIT_COMMIT, + urls = ["https://github.com/bazelbuild/rules_cc/archive/%s.tar.gz" % _RULES_CC_GIT_COMMIT],)

重新編譯,成功!

總結

以上是生活随笔為你收集整理的mediapipe bazel 编译问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。