Как собрать тензор потока 1.13.1 с пользовательским протобуфом? - PullRequest
4 голосов
/ 08 апреля 2019

Информация о системе

  • Написал ли я собственный код: модификация базельских файлов
  • Платформа ОС и ее распространение: Ubuntu 16.04
  • TensorFlow установлен из: Источник
  • Версия TensorFlow: 1.13.1, загруженная с соответствующего тега (https://github.com/tensorflow/tensorflow/archive/v1.13.1.tar.gz)
  • Версия Python: Python 3.5.2
  • Базельская версия: 0.21.0
  • Версия Protobuf: 3.7.0 (сборка из исходного кода и размещение в файловой системе)
  • CUDA / cuDNN версия: 10.0 / 7
  • Модель GPU и память: GeForce GTX 1060 Ti

Контекст : по умолчанию тензор потока создает свой собственный код protobuf. Несмотря на то, что protobuf также используется в других библиотеках, его экспортированные символы противоречат символам, предоставленным tenorflow. Единственным хорошим решением этой проблемы является использование уникальной и независимой (т. Е. Вне тензорного потока) версии protobuf для всех библиотек (включая тензорный поток). Поэтому мне в основном нужно построить тензор потока с целевой установленной версией protobuf, которая находится где-то в файловой системе.

Проблема : использование пользовательской версии protobuf, установленной где-то в файловой системе (не по системному пути по умолчанию), при сборке tenorflow 1.13.1. Более конкретно, мой вопрос: какие изменения необходимы в базовых файлах тензорного потока, чтобы сделать это возможным. Я новичок в Базеле, и я действительно не понимаю, что делать ...

Вот что я сделал:

1) чтобы отключить внутреннюю сборку protobuf, в .tf_configure.bazelrc я добавил строку:

build --action_env TF_SYSTEM_LIBS="protobuf_archive"

Это работает, как и ожидалось, за исключением того, что мой protobuf, установленный по системному пути по умолчанию, слишком стар, чтобы быть в состоянии проанализировать файлы proto3. В любом случае, это не проблема, так как я хочу использовать свой собственный protobuf версии 3.7.0.

2) чтобы указать, где искать протобуф, я изменил файл workspace.bzl, используя new_local_repository вместо tf_http_archive.

Здесь @ PATH_TO_PROTOBUF @, если путь к библиотеке 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"),
        system_link_files = {
            "//third_party/systemlibs:protobuf.bzl": "protobuf.bzl",
        },
    )

3) Я изменил файл protobuf.BUILD, расположенный в tenorflow-1.13.1 / third_party / systemlibs, изменив двоичные файлы, используемые правилами:

cc_library(
    name = "protobuf",
    hdrs = HEADERS,
    linkopts = ["@PATH_TO_PROTOBUF@/lib/libprotobuf.so"],
    visibility = ["//visibility:public"],
)

cc_library(
    name = "protobuf_headers",
    hdrs = HEADERS,
    linkopts = ["@PATH_TO_PROTOBUF@/lib/libprotobuf.so"],
    visibility = ["//visibility:public"],
)

cc_library(
    name = "protoc_lib",
    linkopts = ["@PATH_TO_PROTOBUF@/lib/libprotoc.so"],
    visibility = ["//visibility:public"],
)

genrule(
    name = "protoc",
    outs = ["protoc.bin"],
    cmd = "ln -s @PATH_TO_PROTOBUF@/bin/protoc $@",
    executable = 1,
    visibility = ["//visibility:public"],
)

Так я думал, что все будет работать, но когда я запустил сборку:

ERROR: .../tensorflow-1.13.1/tensorflow/core/BUILD:2460:1: ProtoCompile tensorflow/core/lib/core/error_codes.pb.cc failed (Exit 127): protoc.bin failed: error executing command 
  (cd /home/robin/.cache/bazel/_bazel_robin/c04a70144cd329180403af87e4cbdc44/execroot/org_tensorflow && \
  exec env - \
    PATH=/bin:/usr/bin \
  bazel-out/host/genfiles/external/protobuf_archive/protoc.bin '--cpp_out=bazel-out/host/genfiles/' -I. -Iexternal/protobuf_archive -Ibazel-out/host/genfiles/external/protobuf_archive tensorflow/core/lib/core/error_codes.proto)
Execution platform: @bazel_tools//platforms:host_platform
[32 / 203] 6 actions, 5 running
    Executing genrule @protobuf_archive//:link_headers [for host]; 0s local
    ProtoCompile .../core/lib/core/error_codes.pb.cc [for host]; 0s local
    Compiling tensorflow/core/platform/default/logging.cc [for host]; 0s local
    ProtoCompile tensorflow/core/example/example.pb.cc [for host]; 0s local
    Executing genrule @local_config_cuda//cuda:cuda-include; 0s local
    [-----] Writing file external/llvm/llvm-tblgen-2.params [for host]
bazel-out/host/genfiles/external/protobuf_archive/protoc.bin: error while loading shared libraries: libprotoc.so.18: cannot open shared object file: No such file or directory

Очевидно, что protoc дает сбой просто потому, что загрузчик не находит libprotoc.

4) Таким образом, решение было тривиально для меня, просто правильно настроив LD_LIBRARY_PATH для автоматического поиска libprotoc.so. К сожалению, ни одно из следующих решений не работает:

A) прямая настройка LD_LIBRARY_PATH

export LD_LIBRARY_PATH=@PATH_TO_PROTOBUF@/lib
bazel build //tensorflow:tensorflow_cc.So

B) установка LD_LIBRARY_PATH с помощью .tf_configure.bazelrc:

build --action_env LD_LIBRARY_PATH="@PATH_TO_PROTOBUF@/lib"

Вывод точно такой же, как и ранее, поэтому мое первое замечание заключается в том, что LD_LIBRARY_PATH не экспортируется (насколько я понимаю). Это можно объяснить, потому что:

exec env - \
    PATH=/bin:/usr/bin \
bazel-out/host/genfiles/external/protobuf_archive/protoc.bin '--cpp_out=bazel-out/host/genfiles/' 

не содержит выражения типа

LD_LIBRARY_PATH=@PATH_TO_PROTOBUF@/lib/ 

Я долго гуглял, не находя решения этой проблемы (я много тестировал, но ничего не получалось) ... может быть, это ограничение версии Bazel, которую я использовал? К сожалению, я не могу использовать более новую версию Bazel просто потому, что тензор потока 1.13.1 запрещает это.

Так что теперь я не очень хорошо знаю, что делать ... Я полагаю, что решение состоит в том, чтобы сделать еще одну модификацию в файлах проекта Bazel tenorflow ...

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Надеюсь, что следующий ответ может кому-то помочь:

Наконец, кажется, что эту проблему можно решить путем изменения файлов тензорного потока Bazel.В файле tensorflow.bzl измените функцию tf_generate_proto_text_sources следующим образом:

def tf_generate_proto_text_sources(name, srcs_relative_dir, srcs, protodeps = [], deps = [], visibility = None):
    out_hdrs = (
        [
            p.replace(".proto", ".pb_text.h")
            for p in srcs
        ] + [p.replace(".proto", ".pb_text-impl.h") for p in srcs]
    )
    out_srcs = [p.replace(".proto", ".pb_text.cc") for p in srcs]
    native.genrule(
        name = name + "_srcs",
        srcs = srcs + protodeps + [clean_dep("//tensorflow/tools/proto_text:placeholder.txt")],
        outs = out_hdrs + out_srcs,
        visibility = visibility,
        cmd =
            "LD_LIBRARY_PATH=@CONFIG_LIBRARY_PATH@ " +
            "$(location //tensorflow/tools/proto_text:gen_proto_text_functions) " +
            "$(@D) " + srcs_relative_dir + " $(SRCS)",
        tools = [
            clean_dep("//tensorflow/tools/proto_text:gen_proto_text_functions"),
        ],
    )

    native.filegroup(
        name = name + "_hdrs",
        srcs = out_hdrs,
        visibility = visibility,
    )

    native.cc_library(
        name = name,
        srcs = out_srcs,
        hdrs = out_hdrs,
        visibility = visibility,
        deps = deps,
    )

Где @ CONFIG_LIBRARY_PATH @ - это значение LD_LIBRARY_PATH, содержащее путь к protobuf lib dir.

1 голос
/ 12 апреля 2019

Для тех, кто заинтересован, я нашел решение, которое не так элегантно, но, кажется, работает:

1) написание сценария call_proto.sh

export LD_LIBRARY_PATH=@TARGET_PROTOBUF_LIB_DIR@:$LD_LIBRARY_PATH
@TARGET_PROTOC_EXECUTABLE@ $@

replace @ TARGET_PROTOBUF_LIB_DIR @и @ TARGET_PROTOC_EXECUTABLE @ с адекватными значениями (библиотека dir, содержащая библиотеку protoc и полный путь к исполняемому файлу protoc).

2) из ​​моего предыдущего примера в тензорном потоке-1.13.1 / third_party / systemlibs / protobuf.BUILD replace:

genrule(
    name = "protoc",
    outs = ["protoc.bin"],
    cmd = "ln -s @PATH_TO_PROTOBUF@/bin/protoc $@",
    executable = 1,
    visibility = ["//visibility:public"],
)

от

genrule(
    name = "protoc",
    outs = ["protoc.bin"],
    cmd = "ln -s @PROTO_CALL_SCRIPT@ $@",
    executable = 1,
    visibility = ["//visibility:public"],
)

с @ PROTO_CALL_SCRIPT @ путем к пути к предыдущему файлу сценария ...

Это решает проблему передачи LD_LIBRARY_PATH впри вызове protoc ...

К сожалению, сейчас возникает другая проблема:

ERROR: /home/robin/.cache/bazel/_bazel_robin/c04a70144cd329180403af87e4cbdc44/external/protobuf_archive/BUILD.bazel:44:1: declared output 'external/protobuf_archive/google/protobuf/any.pb.h' is a dangling symbolic link
[21 / 86] 7 actions, 6 running
    Executing genrule @protobuf_archive//:link_headers [for host]; 0s local
    Executing genrule @local_config_cuda//cuda:cuda-include; 0s local
    @com_google_absl//absl/base:dynamic_annotations; 0s local
    Executing genrule @local_config_cuda//cuda:cuda-lib [for host]; 0s local
    ProtoCompile tensorflow/core/example/example.pb.cc [for host]; 0s local
    ProtoCompile tensorflow/core/example/example.pb.cc; 0s local
    [-----] //tensorflow/cc:ops/candidate_sampling_ops_gen_cc
ERROR: /home/robin/.cache/bazel/_bazel_robin/c04a70144cd329180403af87e4cbdc44/external/protobuf_archive/BUILD.bazel:44:1: declared output 'external/protobuf_archive/google/protobuf/any.proto' is a dangling symbolic link
[21 / 89] 7 actions, 6 running
    Executing genrule @protobuf_archive//:link_headers [for host]; 0s local
    Executing genrule @local_config_cuda//cuda:cuda-include; 0s local
    @com_google_absl//absl/base:dynamic_annotations; 0s local
    Executing genrule @local_config_cuda//cuda:cuda-lib [for host]; 0s local
    ProtoCompile tensorflow/core/example/example.pb.cc [for host]; 0s local
    ProtoCompile tensorflow/core/example/example.pb.cc; 0s local
    [-----] //tensorflow/cc:ops/candidate_sampling_ops_gen_cc
ERROR: /home/robin/.cache/bazel/_bazel_robin/c04a70144cd329180403af87e4cbdc44/external/protobuf_archive/BUILD.bazel:44:1: declared output 'external/protobuf_archive/google/protobuf/arena.h' is a dangling symbolic link
[21 / 89] 7 actions, 6 running
...

По всем заголовкам protobuf появляется одинаковое сообщение об ошибке is a dangling symbolic link.

Действительно, в соответствующей папке protobu_archive у меня есть свисающие символические ссылки, такие как:

any.pb.h -> /usr/include/google/protobuf/any.pb.h

Насколько я понимаю, проблема исходит от genrule link_headers:

genrule(
    name = "link_headers",
    outs = HEADERS,
    cmd = """
      echo "OUTS=$(OUTS) include=$(INCLUDEDIR)"
      for i in $(OUTS); do
        f=$${i#$(@D)/}
        mkdir -p $(@D)/$${f%/*}
        ln -sf $(INCLUDEDIR)/$$f $(@D)/$$f
      done
    """,
)

из-за INCLUDEDIRvalue (/usr/include) все сгенерированные символические ссылки недействительны.

Решение состоит в том, чтобы изменить правило thios так, чтобы оно указывало на допустимую папку включения:

genrule(
    name = "link_headers",
    outs = HEADERS,
    cmd = """
      for i in $(OUTS); do
        f=$${i#$(@D)/}
        mkdir -p $(@D)/$${f%/*}
        ln -sf @TARGET_PROTOBUF_INCLUDE@/$$f $(@D)/$$f
      done
    """,
)

с @ TARGET_PROTOBUF_INCLUDE @ путемto protobuf включить dir в файловую систему ... Теперь символические ссылки генерируются правильно и ошибка оборванных символических ссылок исчезает.

Я получил сообщение об ошибке, что некоторые заголовочные файлы protobuf неизвестны ... для решения этой проблемы было просто сгенерировать адекватное значение для HEADERS в protobuf.BUILD.Я установил для HEADERS значение:

HEADERS = [
    "google/protobuf/any.h",
    "google/protobuf/any.pb.h",
    "google/protobuf/any.proto",
    "google/protobuf/api.pb.h",
    "google/protobuf/api.proto",
    "google/protobuf/arena.h",
    "google/protobuf/arena_impl.h",
    "google/protobuf/arenastring.h",
    "google/protobuf/compiler/code_generator.h",
    "google/protobuf/compiler/command_line_interface.h",
    "google/protobuf/compiler/cpp/cpp_generator.h",
    "google/protobuf/compiler/csharp/csharp_generator.h",
    "google/protobuf/compiler/csharp/csharp_names.h",
    "google/protobuf/compiler/importer.h",
    "google/protobuf/compiler/java/java_generator.h",
    "google/protobuf/compiler/java/java_names.h",
    "google/protobuf/compiler/js/js_generator.h",
    "google/protobuf/compiler/js/well_known_types_embed.h",
    "google/protobuf/compiler/objectivec/objectivec_generator.h",
    "google/protobuf/compiler/objectivec/objectivec_helpers.h",
    "google/protobuf/compiler/parser.h",
    "google/protobuf/compiler/php/php_generator.h",
    "google/protobuf/compiler/plugin.h",
    "google/protobuf/compiler/plugin.pb.h",
    "google/protobuf/compiler/plugin.proto",
    "google/protobuf/compiler/python/python_generator.h",
    "google/protobuf/compiler/ruby/ruby_generator.h",
    "google/protobuf/descriptor.h",
    "google/protobuf/descriptor.pb.h",
    "google/protobuf/descriptor.proto",
    "google/protobuf/descriptor_database.h",
    "google/protobuf/duration.pb.h",
    "google/protobuf/duration.proto",
    "google/protobuf/dynamic_message.h",
    "google/protobuf/empty.pb.h",
    "google/protobuf/empty.proto",
    "google/protobuf/extension_set.h",
    "google/protobuf/extension_set_inl.h",
    "google/protobuf/field_mask.pb.h",
    "google/protobuf/field_mask.proto",
    "google/protobuf/generated_enum_reflection.h",
    "google/protobuf/generated_enum_util.h",
    "google/protobuf/generated_message_reflection.h",
    "google/protobuf/generated_message_table_driven.h",
    "google/protobuf/generated_message_util.h",
    "google/protobuf/has_bits.h",
    "google/protobuf/implicit_weak_message.h",
    "google/protobuf/inlined_string_field.h",
    "google/protobuf/io/coded_stream.h",
    "google/protobuf/io/gzip_stream.h",
    "google/protobuf/io/printer.h",
    "google/protobuf/io/strtod.h",
    "google/protobuf/io/tokenizer.h",
    "google/protobuf/io/zero_copy_stream.h",
    "google/protobuf/io/zero_copy_stream_impl.h",
    "google/protobuf/io/zero_copy_stream_impl_lite.h",
    "google/protobuf/map.h",
    "google/protobuf/map_entry.h",
    "google/protobuf/map_entry_lite.h",
    "google/protobuf/map_field.h",
    "google/protobuf/map_field_inl.h",
    "google/protobuf/map_field_lite.h",
    "google/protobuf/map_type_handler.h",
    "google/protobuf/message.h",
    "google/protobuf/message_lite.h",
    "google/protobuf/metadata.h",
    "google/protobuf/metadata_lite.h",
    "google/protobuf/parse_context.h",
    "google/protobuf/port.h",
    "google/protobuf/port_def.inc",
    "google/protobuf/port_undef.inc",
    "google/protobuf/reflection.h",
    "google/protobuf/reflection_ops.h",
    "google/protobuf/repeated_field.h",
    "google/protobuf/service.h",
    "google/protobuf/source_context.pb.h",
    "google/protobuf/source_context.proto",
    "google/protobuf/struct.pb.h",
    "google/protobuf/struct.proto",
    "google/protobuf/stubs/bytestream.h",
    "google/protobuf/stubs/callback.h",
    "google/protobuf/stubs/casts.h",
    "google/protobuf/stubs/common.h",
    "google/protobuf/stubs/fastmem.h",
    "google/protobuf/stubs/hash.h",
    "google/protobuf/stubs/logging.h",
    "google/protobuf/stubs/macros.h",
    "google/protobuf/stubs/mutex.h",
    "google/protobuf/stubs/once.h",
    "google/protobuf/stubs/platform_macros.h",
    "google/protobuf/stubs/port.h",
    "google/protobuf/stubs/status.h",
    "google/protobuf/stubs/stl_util.h",
    "google/protobuf/stubs/stringpiece.h",
    "google/protobuf/stubs/strutil.h",
    "google/protobuf/stubs/template_util.h",
    "google/protobuf/text_format.h",
    "google/protobuf/timestamp.pb.h",
    "google/protobuf/timestamp.proto",
    "google/protobuf/type.pb.h",
    "google/protobuf/type.proto",
    "google/protobuf/unknown_field_set.h",
    "google/protobuf/util/delimited_message_util.h",
    "google/protobuf/util/field_comparator.h",
    "google/protobuf/util/field_mask_util.h",
    "google/protobuf/util/json_util.h",
    "google/protobuf/util/message_differencer.h",
    "google/protobuf/util/time_util.h",
    "google/protobuf/util/type_resolver.h",
    "google/protobuf/util/type_resolver_util.h",
    "google/protobuf/wire_format.h",
    "google/protobuf/wire_format_lite.h",
    "google/protobuf/wire_format_lite_inl.h",
    "google/protobuf/wrappers.pb.h",
    "google/protobuf/wrappers.proto",
]

Это просто список файлов, содержащихся в protobuf, включая dir.После проверки я могу теперь сказать, что все символические ссылки для моей конкретной установки protobuf были помещены в bazel-genfiles/external/protobuf_archive.

Я был очень уверен в этом моменте, но, вероятно, слишком много, так как у меня новая ошибка:

ERROR: .../tensorflow-1.13.1/tensorflow/stream_executor/BUILD:18:1: C++ compilation of rule '//tensorflow/stream_executor:dnn_proto_cc_impl' failed (Exit 1): crosstool_wrapper_driver_is_not_gcc failed: error executing command 
  (cd /home/robin/.cache/bazel/_bazel_robin/c04a70144cd329180403af87e4cbdc44/execroot/org_tensorflow && \
  exec env - \
    PATH=/bin:/usr/bin \
    PWD=/proc/self/cwd \
  external/local_config_cuda/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc -MD -MF bazel-out/host/bin/tensorflow/stream_executor/_objs/dnn_proto_cc_impl/dnn.pb.pic.d '-frandom-seed=bazel-out/host/bin/tensorflow/stream_executor/_objs/dnn_proto_cc_impl/dnn.pb.pic.o' -iquote . -iquote bazel-out/host/genfiles -iquote bazel-out/host/bin -iquote external/protobuf_archive -iquote bazel-out/host/genfiles/external/protobuf_archive -iquote bazel-out/host/bin/external/protobuf_archive '-std=c++11' -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -fPIC -U_FORTIFY_SOURCE '-D_FORTIFY_SOURCE=1' -fstack-protector -Wall -fno-omit-frame-pointer -no-canonical-prefixes -fno-canonical-system-headers -DNDEBUG -g0 -O2 -ffunction-sections -fdata-sections -g0 '-march=native' -g0 -Wno-unknown-warning-option -Wno-unused-but-set-variable -Wno-sign-compare -c bazel-out/host/genfiles/tensorflow/stream_executor/dnn.pb.cc -o bazel-out/host/bin/tensorflow/stream_executor/_objs/dnn_proto_cc_impl/dnn.pb.pic.o)
Execution platform: @bazel_tools//platforms:host_platform
[255 / 752] 9 actions running
    @local_config_cuda//cuda:cuda-include; 5s local
    @com_google_absl//absl/base:base; 0s local
    Compiling tensorflow/stream_executor/dnn.pb.cc [for host]; 0s local
    Executing genrule @jpeg//:simd_x86_64_assemblage23 [for host]; 0s local
    Compiling .../costs/op_performance_data.pb.cc [for host]; 0s local
    Compiling .../core/protobuf/transport_options.pb.cc [for host]; 0s local
    Compiling .../core/protobuf/rewriter_config.pb.cc [for host]; 0s local
    Compiling tensorflow/core/framework/types.pb.cc [for host]; 0s local ...
In file included from bazel-out/host/genfiles/tensorflow/stream_executor/dnn.pb.cc:4:0:
bazel-out/host/genfiles/tensorflow/stream_executor/dnn.pb.h:10:10: fatal error: google/protobuf/port_def.inc: No such file or directory
 #include <google/protobuf/port_def.inc>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

Опять проблема включения, но не в той же цели.На этот раз я действительно не понимаю, что происходит.На самом деле есть опция -iquote bazel-out/host/genfiles/external/protobuf_archive, переданная вызову, и соответствующая папка содержит ранее сгенерированную символическую ссылку на google/protobuf/port_def.inc.

Я предполагаю, что проблема связана с флагом -iquote, переданным компилятору.Это должно быть -I вместо этого, не так ли?Как я могу решить эту проблему?

---- РЕДАКТИРОВАТЬ ----

Решением было добавить директиву include для папки include следующим образом:

cc_library(
    name = "protobuf",
    hdrs = HEADERS,
    includes = ["."],
    linkopts = ["@TARGET_PROTOBUF_LIB@"],
    visibility = ["//visibility:public"],
)

cc_library(
    name = "protobuf_headers",
    hdrs = HEADERS,
    includes = ["."],
    linkopts = ["@TARGET_PROTOBUF_LIB@"],
    visibility = ["//visibility:public"],
)

Замечание : очевидно, использование includes = ["."], является анти-паттерном согласно bazel doc, но в этом единственное, что я нашел, чтобы заставить его работать ...

Наконец, я возвращаюсь к первой ошибке:

ERROR: /home/robin/soft/PID/pid-workspace/wrappers/tensorflow/build/1.13.1/tensorflow-1.13.1/tensorflow/core/BUILD:2489:1: Executing genrule //tensorflow/core:protos_all_proto_text_srcs failed (Exit 127): bash failed: error executing command 
  (cd /home/robin/.cache/bazel/_bazel_robin/c04a70144cd329180403af87e4cbdc44/execroot/org_tensorflow && \
  exec env - \
    PATH=/bin:/usr/bin \
  /bin/bash -c 'source external/bazel_tools/tools/genrule/genrule-setup.sh; bazel-out/host/bin/tensorflow/tools/proto_text/gen_proto_text_functions bazel-out/host/genfiles/tensorflow/core tensorflow/core/ tensorflow/core/example/example.proto tensorflow/core/example/feature.proto tensorflow/core/framework/allocation_description.proto tensorflow/core/framework/api_def.proto tensorflow/core/framework/attr_value.proto tensorflow/core/framework/cost_graph.proto tensorflow/core/framework/device_attributes.proto tensorflow/core/framework/function.proto tensorflow/core/framework/graph.proto tensorflow/core/framework/graph_transfer_info.proto tensorflow/core/framework/iterator.proto tensorflow/core/framework/kernel_def.proto tensorflow/core/framework/log_memory.proto tensorflow/core/framework/node_def.proto tensorflow/core/framework/op_def.proto tensorflow/core/framework/reader_base.proto tensorflow/core/framework/remote_fused_graph_execute_info.proto tensorflow/core/framework/resource_handle.proto tensorflow/core/framework/step_stats.proto tensorflow/core/framework/summary.proto tensorflow/core/framework/tensor.proto tensorflow/core/framework/tensor_description.proto tensorflow/core/framework/tensor_shape.proto tensorflow/core/framework/tensor_slice.proto tensorflow/core/framework/types.proto tensorflow/core/framework/variable.proto tensorflow/core/framework/versions.proto tensorflow/core/protobuf/config.proto tensorflow/core/protobuf/cluster.proto tensorflow/core/protobuf/debug.proto tensorflow/core/protobuf/device_properties.proto tensorflow/core/protobuf/queue_runner.proto tensorflow/core/protobuf/rewriter_config.proto tensorflow/core/protobuf/tensor_bundle.proto tensorflow/core/protobuf/saver.proto tensorflow/core/util/event.proto tensorflow/core/util/memmapped_file_system.proto tensorflow/core/util/saved_tensor_slice.proto tensorflow/core/lib/core/error_codes.proto tensorflow/tools/proto_text/placeholder.txt')
Execution platform: @bazel_tools//platforms:host_platform
[834 / 1,712] 9 actions running
    @com_google_absl//absl/strings:strings; 1s local
    @com_google_absl//absl/strings:strings; 0s local
    @com_google_absl//absl/strings:strings; 0s local
    @com_google_absl//absl/types:optional; 0s local
    @com_google_absl//absl/types:optional; 0s local
    @com_google_absl//absl/strings:strings; 0s local
    Executing genrule //tensorflow/core:protos_all_proto_text_srcs; 0s local
    //tensorflow/core:protos_all_proto_text_srcs; 0s local ...
bazel-out/host/bin/tensorflow/tools/proto_text/gen_proto_text_functions: error while loading shared libraries: libprotobuf.so.18: cannot open shared object file: No such file or directory

Причина та же, что и в первый раз: команда не получила LD_LIBRARY_PATH.Но в этот раз я не знаю, какой файл мне следует изменить, чтобы сделать это ... В общем, я боюсь, что такая ситуация возникнет каждый раз, когда исполняемый файл, использующий libprotobuf / libprotoc, вызывается процессом сборки.Итак, мой вопрос: есть ли способ решить эту проблему (передать LD_LIBRARY_PATH в среду) раз и навсегда для любой цели, изменив один или несколько файлов в проекте тензорного потока?Или это внутренняя проблема с Базелем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...