向 bazel 中的第三方依赖项提供 运行 时间环境变量路径(例如 LD_LIBRARY_PATH)

Provide run time environment variable path (e.g. LD_LIBRARY_PATH) to third party dependency in bazel

在我使用的代码库中,我们使用 oracle 即时客户端库作为 Bazel 中的第三方依赖项,如下所示:

cc_library(
    name = "instant_client_basiclite",
    srcs = glob(["*.so*"]),
    visibility = ["//visibility:public"],
)

图书馆看起来像这样:

$ bazel query 'deps(@instant_client_basiclite//:instant_client_basiclite)'
@instant_client_basiclite//:instant_client_basiclite
@instant_client_basiclite//:liboramysql.so
@instant_client_basiclite//:libociicus.so
@instant_client_basiclite//:libocci.so.21.1
@instant_client_basiclite//:libocci.so
@instant_client_basiclite//:libnnz21.so
@instant_client_basiclite//:libclntshcore.so
...

就链接而言,它可以工作,但似乎仍然需要库的路径,否则我会收到 运行 时间错误(oracle 错误 1804)。可以通过设置任何环境变量 ORACLE_HOMELD_LIBRARY_PATH 来解决该错误。事实上,对于 IBM WebSphere MQ 也有同样的需求(需要找到字符编码 table 文件)。

ldd 在二进制上指向 .../bazel-bin/app/../../../_solib_k8/_U@instant_Uclient_Ubasiclite_S_S_Cinstant_Uclient_Ubasiclite___U/libocci.so.21.1

如何设置所需的路径变量,以便 bazel 测试、bazel 运行 和 Bazel 容器映像规则起作用?

一种可能是添加以下命令行选项:

--test_env=ORACLE_HOME="$(bazel info output_base)/external/instant_client_basiclite"

可惜不能放到.bazelrc.