Bazel 如何放置cc#U库的数据依赖项';共享对象是否与共享对象位于同一目录中?

Bazel 如何放置cc#U库的数据依赖项';共享对象是否与共享对象位于同一目录中?,bazel,Bazel,我有一个共享对象(libname.so)的cc_library(),它需要一个数据文件data.xml,该文件与它自身位于同一目录中 Bazel*.runfiles/将数据文件放置在与软件存储库中相同的相对路径中,但我希望它如上所述。谢谢大家! 我试过: cc_library( name = "libname", srcs = ["libname.so"], data = ["data.xml"], ) 我希望data.xml和

我有一个共享对象(libname.so)的cc_library(),它需要一个数据文件data.xml,该文件与它自身位于同一目录中

Bazel*.runfiles/将数据文件放置在与软件存储库中相同的相对路径中,但我希望它如上所述。谢谢大家!

我试过:

    cc_library( 
        name = "libname",
        srcs = ["libname.so"],
        data = ["data.xml"],
    )

我希望data.xml和libname.so位于同一路径(bazel-bin/proj/program.runfiles/repo/_-solib_-k8/_-U-S_-Slibname/),但数据文件位于相对于项目根目录的目录中。(bazel-bin/proj/program.runfiles/repo/src/data.xml)

目前最好的解决方案是,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",
    ],
)