我正在开发一个库,该库将与Scala的Raspberry PI上的I2C总线通信。为此,我需要一些JNI代码,它将与设备上的操作系统中断。
我尝试为此制作一个构建文件,现在看起来像这样:
name := "core"
organization := "nl.fizzylogic.reactivepi"
scalaVersion := "2.11.6"
val nativeClasses = List(
"nl.fizzylogic.reactivepi.i2c.I2CDevice"
)
val nativeDeviceSources = List(
"src/jni/nl_fizzylogic_reativepi_i2c_I2CDevice.c"
)
val nativeGenerateHeaders = taskKey[Int]("Generates JNI headers for the library")
val nativeCompile = taskKey[Int]("Compiles the native library")
nativeGenerateHeaders := {
("javah -classpath target/scala-2.11/classes -d src/jni " + nativeClasses.mkString(" ")) !
}
nativeCompile := {
("gcc -Wl -add-stdcall-alias -I$JAVA_HOME/include -I$JAVA_HOME/include/darwin -I$JAVA_HOME/include/linux -shared -o target/reactivepi.so " + nativeDeviceSources.mkString(" ")) !
}
到目前为止,javah调用已成功。但是当我调用nativeCompile任务时,GCC告诉我它无法找到jni.h文件。但是,当我将命令从构建文件复制并粘贴到终端并执行它时,它会成功。
当我从自定义构建任务执行gcc时,它似乎没有拾取包含路径。但我不知道我在这里做错了什么。