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