如何使用Bazel构建Rust JNI绑定并解决动态库加载报错问题
问题原因
Java构建规则的deps参数仅接受Java类依赖,原生共享库直接填入deps会被规则忽略,Bazel既不会触发该Rust库的构建流程,也不会将其打包到运行时的runfiles目录,因此出现找不到库的报错。
修复方案
直接修改java/BUILD.bazel配置即可:
- 将Rust共享库依赖从
deps移动到resources参数下,确保Bazel会构建该库并拷贝到runfiles对应路径 - 新增
jvm_flags参数,将Rust库所在的runfiles路径添加到JVM的java.library.path中
修改后的完整配置如下:
package(default_visibility = ["//visibility:public"]) load("@rules_java//java:defs.bzl", "java_binary") java_binary( name = "java_binary", srcs = glob(["*.java"]), main_class = "Main", resources = [ "//my_lib/rust:rust_bindings" ], jvm_flags = [ "-Djava.library.path=my_lib/rust", ], )
验证
修改完成后重新执行bazel run //my_lib/java:java_binary,即可正常输出:
Hello from Java Hello from Rust
内容的提问来源于stack exchange,提问作者Billbucket
相关产品推荐
相关产品推荐

