2016-07-17 34 views
0

如何使用gradle構建共享庫?帶有gradle的JNI

我的項目樹

核心/ 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列 無法獲取類型爲org.gradle的工具鏈'gcc'(GNU GCC)的未知屬性'cCompiler'。 nativeplatform.toolchain.internal.gcc.GccToolChain。

回答

0

The Gcc class沒有財產cCompiler這就是爲什麼你的錯誤。 cCompiler而不是GccPlatformToolchain的財產。 Gcc有一個或多個平臺工具鏈實例。如果你想你的標誌適用於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語句,這可能更清潔,更習慣。

相關問題