向 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_HOME
或 LD_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.
在我使用的代码库中,我们使用 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_HOME
或 LD_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.