java - 如何设置使用 Java 和本机 C++ 代码的 Gradle 项目?
问题描述
我正在学习如何创建一个 Gradle 项目,在该项目中我想使用 JNI 从 Java 调用本机 C++ 代码。我正在关注这个 JetBrains教程,该教程对我来说效果很好,我对此有所了解。
但是本教程中的项目使用 C 本机代码,但我想改用 C++。问题是我尝试了几种方法,但老实说,我不知道我在做什么。我的尝试以一个问题结束,即如果我构建项目,则不会构建库(.dll 对我来说,因为我使用的是 Windows)。我没有收到错误消息,dll 就像我用 C 构建它一样存在。
我应该如何修改 build.gradle 以构建 C++ 本机代码而不是 C?
为我工作的 build.gradle(但使用 C,我想更改)如下所示:
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'c'
mainClassName = 'HelloWorld'
repositories {
mavenCentral()
}
dependencies {
testCompile('junit:junit:4.12')
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
test {
systemProperty "java.library.path", file("${buildDir}/libs/hello/shared").absolutePath
}
model {
platforms {
x64 {
architecture "x64"
}
}
components {
hello(NativeLibrarySpec) {
targetPlatform "x64"
binaries.all {
if (targetPlatform.operatingSystem.macOsX) {
cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include"
cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/darwin"
cCompiler.args '-mmacosx-version-min=10.4'
linker.args '-mmacosx-version-min=10.4'
} else if (targetPlatform.operatingSystem.linux) {
cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include"
cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/linux"
cCompiler.args '-D_FILE_OFFSET_BITS=64'
} else if (targetPlatform.operatingSystem.windows) {
cCompiler.args "-I${org.gradle.internal.jvm.Jvm.current().javaHome}/include"
cCompiler.args "-I${org.gradle.internal.jvm.Jvm.current().javaHome}/include/win32"
linker.args "Shlwapi.lib", "Advapi32.lib"
} else if (targetPlatform.operatingSystem.freeBSD) {
cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include"
cCompiler.args '-I', "${org.gradle.internal.jvm.Jvm.current().javaHome}/include/freebsd"
}
}
}
}
}
test.dependsOn 'helloSharedLibrary'
解决方案
推荐阅读
- android - 当我将高度设置为换行或匹配或 0dp 时,listview 项目未显示,它们仅在我使用特定数字时显示
- prolog - 积极因素清单
- python - Tensorflow(keras)模型总是给我相同的价值
- python - Django-ckeditor 图像调整大小或图像最大宽度
- javascript - 将表转换为树 JSON
- javascript - 在 ASP.NET Core MVC 中使用 JavaScript 在函数中传递 id
- python - numpy.AxisError:轴 2 超出维度 0 数组的范围
- c# - 当我使用 Azure 函数在 Datalake 中上传文件时,存储事件触发器不起作用
- google-cloud-platform - 在 GCP 中找不到托管实例组的滚动更新选项
- excel - 无法运行宏(宏名)。该工作簿中的宏可能不可用,或者所有宏都可能被禁用