Я пытаюсь написать кодлет в 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?