不要用Bazel损坏共享库的名称 给出一个用Bazel构建的C++应用程序,它依赖于外部的、系统提供的共享库: cc_binary( name = 'app', srcs = ['app.cpp'], linkstatic = False, deps = ['@my_system//:system_lib'], )
工作区和BUILD.my_系统文件:不要用Bazel损坏共享库的名称 给出一个用Bazel构建的C++应用程序,它依赖于外部的、系统提供的共享库: cc_binary( name = 'app', srcs = ['app.cpp'], linkstatic = False, deps = ['@my_system//:system_lib'], ),c++,build,shared-libraries,bazel,C++,Build,Shared Libraries,Bazel,工作区和BUILD.my_系统文件: new_local_repository( name = 'my_system', build_file = 'BUILD.my_system', path = '/usr/lib/my_system/', ) 这将生成,但首先将系统提供的库复制到缓存,并链接到该缓存: $ ldd bazel-bin/app/app system_lib.so => /home/erenon/bazel/proj/bazel-bin/app/..
new_local_repository(
name = 'my_system',
build_file = 'BUILD.my_system',
path = '/usr/lib/my_system/',
)
这将生成,但首先将系统提供的库复制到缓存,并链接到该缓存:
$ ldd bazel-bin/app/app
system_lib.so => /home/erenon/bazel/proj/bazel-bin/app/../_solib_k8/_U@my_system_S_S_Csystem_Ulib___Uexternal_Smy_system/system_lib.so
[...]
如果我将app
移动到具有/usr/lib/my_system/system_lib.so
的同一系统,它会断开,因为它丢失了缓存。我希望将应用程序
打包,使其直接链接到原始。因此
,而不需要中间缓存副本或名称损坏,即:我希望实现:
$ ldd bazel-bin/app/app
system_lib.so => /usr/lib/my_system/system_lib.so
[...]
我尝试了
cc\u导入。系统提供了
,但这似乎只适用于Windowslib/dll
s。用另一个cc\u库包装您的库。我无法解释它为什么有效,但它确实有效
cc_library(
name = "libsystem_lib",
srcs = [ ":system_lib" ],
hdrs = ...
)
而要依靠这个
cc_library(
name = "libsystem_lib",
srcs = [ ":system_lib" ],
hdrs = ...
)