скомпилировать C JNI, используя Gradle - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть файл build.gradle, с которым я пытаюсь использовать его для создания своего экземпляра JNI, я использую документацию Gradle , но есть много примеров на C ++ и не так много сC. Я пытаюсь добиться установки, в которой я могу добавить любое количество файлов .c и .h в свое приложение и использовать Gradle для их компиляции и создания одного или нескольких библиотечных файлов .so.

Я знаю, что мой build.gradle неправильный, но я потерял идеи, как это сделать, я нашел много вещей на стороне C ++ в JNI, но не на C.

Мой текущий проектструктура выглядит следующим образом:

project/
├──src/
   └── com/
       └── example/
           └── subProjectExample1
               └── HelloJNI.java
           └── subProjectExample2
               └── main.java
   └── main/
       ├── c
           └── HelloJNI.c
       ├── headers
           └── com.example_HelloJNI.h

build.gradle

allprojects {
    apply plugin "java"
    apply plugin "c"
    apply plugin "eclipse"
}
subprojects {
    apply plugin "java"
    repositories {
        jcenter()
    }
}

project(':example1') {
    dependencies {
    }
}   

project(':example2') {
    dependencies {
        compile project(':example1')
    }
}   

model {
    repositories {
        libs(PrebuiltLibraries) {
            jdk {
                headers.srcDirs "${System.properties['java.home']}/../include", 
                    "${System.properties['java.home']}/../include/linux"
            }
        }
    }
    platforms {
       linux64 {
        operatingSystem "linux"
           architecture "x86_64"
       }
    }
    toolchains {
        gcc(Gcc) {
            eachPlatform {
                cCompiler.executable = "/usr/bin/gcc"
            }
        }
    }
    components {
        main(NativeLibrarySpec) {
            sources {
                c {
                    source {
                        srcDir "src/main/c"
                        include "**/*.c"
                    }
                    exportedHeaders {
                        srcDir "src/main/headers"
                    }
                }
            }
        }
    }
}

Я запускаю это с ./gradlew mainExecutable из этих документов

Output.txt, который я получаю:

HelloJNI.c: fatal error: jni.h: No such file or directory

 #include "jni.h"
                 ^   
compilation terminated.

error: command 'gcc' failed with exit status 1

Просто для справки. Я использую Gradle версии 5.6.2 с Eclipse.

РЕДАКТИРОВАТЬ:

Iдобавил следующее:

repositories {
        libs(PrebuiltLibraries) {
            jdk {
                headers.srcDirs "${System.properties['java.home']}/../include", 
                    "${System.properties['java.home']}/../include/linux"
            }
        }
    }

Но я все еще получаю ту же ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...