gpt4 book ai didi

c++ - 不要使用Bazel破坏共享库的名称

转载 作者:行者123 更新时间:2023-12-02 10:15:39 35 4
gpt4 key购买 nike

给定一个使用Bazel构建的C++应用程序,它依赖于系统提供的外部共享库:

cc_binary(
name = 'app',
srcs = ['app.cpp'],
linkstatic = False,
deps = ['@my_system//:system_lib'],
)

WORKSPACE和BUILD.my_system文件:
new_local_repository(
name = 'my_system',
build_file = 'BUILD.my_system',
path = '/usr/lib/my_system/',
)
cc_import(
name = 'system_lib',
shared_library = 'system_lib.so',
visibility = ['//visibility:public'],
)

这样就建立了,但是首先将系统提供的lib复制到缓存中,并链接到该缓存:
$ 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的相同系统,则会中断,因为它会丢失高速缓存。我想将 app打包为直接链接到原始 .so的方式,而无需中间缓存副本或名称修改,即:我想实现:
$ ldd bazel-bin/app/app
system_lib.so => /usr/lib/my_system/system_lib.so
[...]

我尝试了 cc_import.system_provided,但这似乎仅适用于Windows lib/dll

最佳答案

用另一个cc_library包装您的库。
我无法解释为什么会起作用,但是可以。

cc_library(
name = "libsystem_lib",
srcs = [ ":system_lib" ],
hdrs = ...
)
而是依靠这个。

关于c++ - 不要使用Bazel破坏共享库的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62017149/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com