系统信息
上下文:默认情况下,tensorflow会构建自己的protobuf代码。尽管protobuf也被其他库使用,但它的导出符号与tensorflow提供的符号冲突。解决该问题的唯一好的方法是对所有库(包括张量流)使用唯一且独立的(即在张量流之外)protobuf版本。所以我基本上需要使用目标安装版本的protobuf构建tensorflow,该版本位于文件系统中的某个位置。
问题:构建tensorflow 1.13.1时,使用protobuf的自定义版本,该版本安装在文件系统中的某个位置(不在默认系统路径中)。更具体地说,我的问题是:需要对tensorflow的bazel文件进行哪些修改才能使其实现。我是bazel的新手,我对如何做感到非常困惑。
这是我所做的:
1)停用protobuf的内部构建,在.tf_configure.bazelrc我添加的代码行中:
build --action_env TF_SYSTEM_LIBS="protobuf_archive"
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作,除了安装在默认系统路径中的protobuf太旧以至于无法解析proto3文件。无论如何这都不是真正的问题,因为我想使用3.7.0版的自定义protobuf。
2)指定在哪里找到protobuf我通过使用new_local_repository而不是更改了workspace.bzl文件tf_http_archive。
如果我的文件系统中安装了protobuf库的路径,则为@ PATH_TO_PROTOBUF @。
new_local_repository(
name = "protobuf_archive",
path = "@PATH_TO_PROTOBUF@",
build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD"),
)
new_local_repository(
name = "com_google_protobuf",
path = "@PATH_TO_PROTOBUF@",
system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD"),
system_link_files = {
"//third_party/systemlibs:protobuf.bzl": "protobuf.bzl",
},
)
new_local_repository(
name = "com_google_protobuf_cc",
path = "@PATH_TO_PROTOBUF@",
system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD"), …Run Code Online (Sandbox Code Playgroud)