2016-07-17 12 views
0

gradleで共有ライブラリを構築するには?JNI with gradle

私のプロジェクトツリー

コア/ C/{*。C、* .H}

コア/ C /含める/ {JNI、LIB}

私のビルド。 Gradleの

apply plugin: 'c' 

def JNI_INCLUDE_DIR = this.properties['jni.include.dir'] 

model { 
     components { 
       bridge(NativeLibrarySpec) { 
         sources.c.source { 
           srcDir 'core/c' 
           include '**/*.c' 
         } 
         sources.c.exportedHeaders { 
           srcDir 'core/c/include' 
         } 
         buildTypes { 
           debug 
           release 
         } 
       } 
     } 
toolChains { 
       gcc(Gcc) { 
         if(System.properties['os.name'].equals("Mac OS X")) { 
           cCompiler.withArguments { 
             args << "-I" + JNI_INCLUDE_DIR 
             args << "-I" + JNI_INCLUDE_DIR + "/darwin" 
             args << "-std=gnu11" 
             args << "-g" 
           } 
         } else { 
           cCompiler.withArguments { 
             args << "-I" + JNI_INCLUDE_DIR 
             args << "-I" + JNI_INCLUDE_DIR + "/linux" 
             args << "-std=gnu11" 
             args << "-g" 
           } 
         } 
       } 
     } 
} 

エラー

モデルルールの実行中に例外がスローされました:toolChains {...} @ build.gradle 23行2列 ツールチェーン 'gcc'(GNU GCC)のタイプがorg.gradleの不明なプロパティ 'cCompiler'を取得できませんでした。 GccToolChain。

答えて

0

The Gcc classには、エラーが発生する理由があるので、cCompilerが表示されます。代わりにcCompilerのプロパティがGccPlatformToolchainです。 Gccにはプラットフォームツールチェーンのインスタンスが1つ以上あります。あなたはGccツールチェーン内の各プラットフォームにあなたのフラグを適用したい場合は、例えば、eachPlatformを使用することができます。私はあなたにも、特定のオペレーティングシステム/アーキテクチャ用のカスタムプラットフォームを定義して、中にあるものを参照することができると信じて

toolChains { 
    gcc(Gcc) { 
     eachPlatform { 
      if(System.properties['os.name'].equals("Mac OS X")) { 
       cCompiler.withArguments { 
        args << "-I" + JNI_INCLUDE_DIR 
        args << "-I" + JNI_INCLUDE_DIR + "/darwin" 
        args << "-std=gnu11" 
        args << "-g" 
       } 
      } else { 
       cCompiler.withArguments { 
        args << "-I" + JNI_INCLUDE_DIR 
        args << "-I" + JNI_INCLUDE_DIR + "/linux" 
        args << "-std=gnu11" 
        args << "-g" 
       } 
      } 
     } 
    } 
} 

をif文を使用するのではなく、Gccブロックを使用します。これは、よりクリーンでより慣用的です。

関連する問題