Bazel build не связывает зависимости .so файлы - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь написать кодлет в NVIDIA isaac SDK, который использует bazel build. Следующий случай. У меня есть файл A.so, который связан с B.so. Но используя A.so, я написал кодлет и упомянул A.so в столбце srcs в cc_library (). Компиляция прошла успешно, но во время выполнения конечный двоичный файл не может найти файл B.so.

Ниже приведен пример правила cc_library, в котором упоминаются все файлы .so в каталоге lib /. Когда я запускаю приложение, оно может связывать только файлы A.so, и, хотя другие файлы .so зависимостей находятся по тому же пути, оно не может их забрать.

После развертывания окончательный вариант.so файлы помещаются в какой-то каталог, например, «_solib_arm64-v8a / _U @ xxx_Uaarch64_Ujetpack42_S_S_Cxxx_Uaarch64_Ujetpack42 ___ Uextern» al_Sxxx_Uaarch64_Ujetpack42_Sisaac_Upackage_Sliac_U5 *, если вы все еще не нашли в этом случае. экспортировать путь в переменную LD_LIBRARY_PATH.

cc_library (

name = "xyz",

srcs = glob(["lib/*.so*"]),

hdrs = glob(["include/*.h*"])+
       glob(["include/opencv2/*.h*"])+
       glob(["include/opencv2/core/**/*.h*"])+
       glob(["include/opencv2/highgui/*.h*"])+
       glob(["include/opencv2/imgcodecs/*.h*"])+
       glob(["include/opencv2/videoio/*.h*"])+
       glob(["include/opencv2/imgproc/**/*.h*"]),
includes = ["include"],


visibility = ["//visibility:public"],
deps = [
    "@com_nvidia_isaac//third_party:cuda",
    "@libvtk_aarch64",
    "@openni_dev_aarch64"
],

)

В: Есть ли другой способ заставить ссылки работать без указания их в LD_LIBRARY_PATH?

1 Ответ

0 голосов
/ 03 октября 2019

Библиотеки общих объектов (.so) не должны выбираться из произвольного каталога по какой-либо причине, это было бы проблемой безопасности, потому что кто-то может предоставить взломанную библиотеку вместо законной. LD_LIBRARY_PATH предназначен для быстрых тестов. Поиск использует пути от /etc/ld.so.conf.

Для gcc есть способ указать компоновщику, где искать, с флагом -R, описанным здесь: Не удается найти .so в том же каталоге, что и исполняемый файл? . В случае с Базелем это, вероятно, можно решить с помощью linker_flag:.

...