cinterop 进程以非零退出值 1 结束
cinterop process finished with non-zero exit value 1
我正在 this 国际象棋应用程序中试验 kotlin 多平台。我在应用程序中有国际象棋引擎的 C++ 代码。对于每个引擎,我想创建一个 kmm 模块。由于 kotlin native 还不能与 c++ 互操作,我必须围绕 c++ 代码创建包装器。在每个 androidMain 中,我都有与 C++ 接口的 JNI class,这很有效。 ios 是我不清楚的地方。我相信我必须围绕 c++ 代码创建一个 obj-c++ 包装器(.mm 文件),然后为包装器执行 cinterop。
iosTarget("ios") {
compilations.getByName("main") {
val jwtc by cinterops.creating {
defFile(project.file("src/iosMain/cpp/jwtc.def"))
packageName("com.cinterop.jwtc")
}
}
}
这样对吗?当我尝试构建它时,gradle 同步失败并出现此错误:
Execution failed for task ':jwtc:cinteropJwtcIos'.
> Process 'command '/Applications/Android Studio Preview.app/Contents/jre/Contents/Home/bin/java'' finished with non-zero exit value 1
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':jwtc:cinteropJwtcIos'. <36 internal calls>
Caused by: org.gradle.process.internal.ExecException: Process 'command '/Applications/Android Studio Preview.app/Contents/jre/Contents/Home/bin/java'' finished with non-zero exit value 1
at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:414)
at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:52)
at org.gradle.process.internal.DefaultExecActionFactory.javaexec(DefaultExecActionFactory.java:198)
at org.gradle.api.internal.project.DefaultProject.javaexec(DefaultProject.java:1145)
at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.runViaExec(KotlinToolRunner.kt:98)
at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.run(KotlinToolRunner.kt:73)
at org.jetbrains.kotlin.gradle.tasks.CInteropProcess.processInterop(KotlinNativeTasks.kt:1035) <122 internal calls>
我已经清理并重新启动了 android 工作室,并且还尝试了 java 8 而不是 11。
我也希望链接到有关 def 文件的更多信息。 kotlin文档中没有太多关于它的内容。
我的jwtc.def:
headers = GameWrapper.h
headerFilter = GameWrapper.h
GameWrapper.h:
@interface GameWrapper
- (void) getBestMove;
@end
GameWrapper.mm:
#include "GameWrapper.h"
#include "Game.h"
@implementation GameWrapper
- (void) getBestMove {
Game game;
game.getBestMove();
}
@end
终于找到真正的错误信息:
线程“main”中的异常java.lang.Error:/var/folders/17/14lmpq652zn5h_cy_h51z7yr0000gr/T/8492320185156128475.c:1:10:致命错误:'GameWrapper.h' 找不到文件
并通过添加 compilerOpts
指向我的 src 文件的位置来修复它:
iosTarget("ios") {
compilations.getByName("main") {
val jwtc by cinterops.creating {
defFile(project.file("src/iosMain/cpp/jwtc.def"))
packageName("com.cinterop.jwtc")
compilerOpts ("-Isrc/iosMain/cpp/")
}
}
}
我正在 this 国际象棋应用程序中试验 kotlin 多平台。我在应用程序中有国际象棋引擎的 C++ 代码。对于每个引擎,我想创建一个 kmm 模块。由于 kotlin native 还不能与 c++ 互操作,我必须围绕 c++ 代码创建包装器。在每个 androidMain 中,我都有与 C++ 接口的 JNI class,这很有效。 ios 是我不清楚的地方。我相信我必须围绕 c++ 代码创建一个 obj-c++ 包装器(.mm 文件),然后为包装器执行 cinterop。
iosTarget("ios") {
compilations.getByName("main") {
val jwtc by cinterops.creating {
defFile(project.file("src/iosMain/cpp/jwtc.def"))
packageName("com.cinterop.jwtc")
}
}
}
这样对吗?当我尝试构建它时,gradle 同步失败并出现此错误:
Execution failed for task ':jwtc:cinteropJwtcIos'.
> Process 'command '/Applications/Android Studio Preview.app/Contents/jre/Contents/Home/bin/java'' finished with non-zero exit value 1
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':jwtc:cinteropJwtcIos'. <36 internal calls>
Caused by: org.gradle.process.internal.ExecException: Process 'command '/Applications/Android Studio Preview.app/Contents/jre/Contents/Home/bin/java'' finished with non-zero exit value 1
at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:414)
at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:52)
at org.gradle.process.internal.DefaultExecActionFactory.javaexec(DefaultExecActionFactory.java:198)
at org.gradle.api.internal.project.DefaultProject.javaexec(DefaultProject.java:1145)
at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.runViaExec(KotlinToolRunner.kt:98)
at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.run(KotlinToolRunner.kt:73)
at org.jetbrains.kotlin.gradle.tasks.CInteropProcess.processInterop(KotlinNativeTasks.kt:1035) <122 internal calls>
我已经清理并重新启动了 android 工作室,并且还尝试了 java 8 而不是 11。
我也希望链接到有关 def 文件的更多信息。 kotlin文档中没有太多关于它的内容。
我的jwtc.def:
headers = GameWrapper.h
headerFilter = GameWrapper.h
GameWrapper.h:
@interface GameWrapper
- (void) getBestMove;
@end
GameWrapper.mm:
#include "GameWrapper.h"
#include "Game.h"
@implementation GameWrapper
- (void) getBestMove {
Game game;
game.getBestMove();
}
@end
终于找到真正的错误信息:
线程“main”中的异常java.lang.Error:/var/folders/17/14lmpq652zn5h_cy_h51z7yr0000gr/T/8492320185156128475.c:1:10:致命错误:'GameWrapper.h' 找不到文件
并通过添加 compilerOpts
指向我的 src 文件的位置来修复它:
iosTarget("ios") {
compilations.getByName("main") {
val jwtc by cinterops.creating {
defFile(project.file("src/iosMain/cpp/jwtc.def"))
packageName("com.cinterop.jwtc")
compilerOpts ("-Isrc/iosMain/cpp/")
}
}
}