Для приложения 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.