Как я могу поместить зависимость данных общего объекта cc_library в тот же каталог, что и общий объект?

Проблема в том, что я не был подключен к сети, поэтому Google Фото не удалось получить выбранное изображение. См. Мой ответ на @ adityakamble49.

1
задан Nick 19 January 2019 в 00:38
поделиться

1 ответ

Лучшее решение, исполняемый файл runfiles работает, но bazel run program не может динамически загружать библиотеки.

1) Группируйте совместно используемые библиотеки и файлы данных вместе:

filegroup(
    name = "libs_and_data",
    # This creates *.runfiles/.../path/to/data/files, for runpath
    data =glob(["*.so*"]) +  glob(["*.xml"]),
)

2) Вручную собирайте и связывайте совместно используемые библиотеки из их исходной папки, 3) Вручную установите путь к каталогу зависимости данных runfiles, который содержит общие библиотеки и файлы данных.

cc_library(
    name = "lib",
    data = [
        # Shared objects are data, not library deps, to avoid _solib in RUNPATH
        "//path/to/libs_and_data",
    ],
    linkopts = [
        # Explicit build-linking of libraries, because we are avoiding cc_library()
        "-lLibrary1",
        "-lLibrary2",
        "-Lpath/to/libs",
        # Point dynamic loader to runfiles location of libraries and datafiles
        # Only the *.runfiles executable will successfully load libraries
        "-Wl,-rpath='../../../path/to/libs'",
    ],
    deps = [
        "//path/to/headers",
    ],
)
0
ответ дан Nick 19 January 2019 в 00:38
поделиться