如果您想使用Bazel构建使用JNI的C++应用程序,可以按照以下步骤操作:
project/
WORKSPACE
BUILD
src/
main/
cpp/
native.h
native.cpp
java/
com/
example/
NativeInterface.java
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "rules_jvm_external",
sha256 = "4a3a12c869c8d7e91d314b3e8be5ecccbeffbc8b5f8d3ff5e9ecb2cda2c6859b",
strip_prefix = "rules_jvm_external-3.3",
url = "https://github.com/bazelbuild/rules_jvm_external/archive/3.3.zip",
)
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
artifacts = [
"org.apache.commons:commons-lang3:3.9",
],
repositories = [
"https://repo1.maven.org/maven2",
],
)
load("@rules_jvm_external//:defs.bzl", "artifact")
cc_binary(
name = "native_lib",
srcs = ["native.cpp"],
linkopts = ["-shared"],
copts = ["-fPIC"],
visibility = ["//visibility:public"],
)
java_library(
name = "java_lib",
srcs = ["com/example/NativeInterface.java"],
visibility = ["//visibility:public"],
deps = [
"@org_apache_commons_commons_lang3//jar",
],
)
java_binary(
name = "java_app",
main_class = "com.example.NativeInterface",
runtime_deps = [
":java_lib",
],
visibility = ["//visibility:public"],
)
cc_binary(
name = "cpp_app",
srcs = ["main/cpp/native.cpp"],
deps = [
":native_lib",
],
visibility = ["//visibility:public"],
)
#ifndef NATIVE_H
#define NATIVE_H
#include
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_com_example_NativeInterface_nativeMethod(JNIEnv* env, jobject obj);
#ifdef __cplusplus
}
#endif
#endif // NATIVE_H
#include "native.h"
JNIEXPORT void JNICALL Java_com_example_NativeInterface_nativeMethod(JNIEnv* env, jobject obj) {
// 在此处添加您的JNI实现代码
}
package com.example;
public class NativeInterface {
public native void nativeMethod();
static {
System.loadLibrary("native_lib");
}
public static void main(String[] args) {
NativeInterface ni = new NativeInterface();
ni.nativeMethod();
}
}
bazel build //:java_app
bazel run //:java_app
bazel build //:cpp_app
bazel run //:cpp_app
这就是使用Bazel构建使用JNI的C++应用程序的基本步骤。您可以根据自己的需求添加更多的源文件和依赖项。