Не изменяйте имя общей библиотеки с помощью Bazel - PullRequest
0 голосов
/ 26 мая 2020

Для приложения C ++, созданного с помощью Bazel, которое зависит от внешней, предоставляемой системой разделяемой библиотеки:

cc_binary(
  name = 'app',
  srcs = ['app.cpp'],
  linkstatic = False,
  deps = ['@my_system//:system_lib'],
)

Файлы WORKSPACE и BUILD.my_system:

new_local_repository(
  name = 'my_system',
  build_file = 'BUILD.my_system',
  path = '/usr/lib/my_system/',
)
cc_import(
  name = 'system_lib',
  shared_library = 'system_lib.so',
  visibility = ['//visibility:public'],
)

Это строит, но сначала копирует предоставленную системой библиотеку в кеш и ссылается на нее:

$ ldd bazel-bin/app/app
    system_lib.so => /home/erenon/bazel/proj/bazel-bin/app/../_solib_k8/_U@my_system_S_S_Csystem_Ulib___Uexternal_Smy_system/system_lib.so
    [...]

Если я перемещаю app в идентичную систему с /usr/lib/my_system/system_lib.so, она ломается, так как он пропускает кеш. Я хотел бы упаковать app таким образом, чтобы он напрямую ссылался на исходный .so, без промежуточной копии кеша или изменения имени, то есть: я хотел бы достичь:

$ ldd bazel-bin/app/app
    system_lib.so => /usr/lib/my_system/system_lib.so
    [...]

Я пробовал cc_import.system_provided, но похоже, что он работает только для Windows lib/dll s.

...