首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNI与gradle

JNI与gradle
EN

Stack Overflow用户
提问于 2016-07-17 16:08:50
回答 1查看 1.1K关注 0票数 0

如何使用gradle构建共享库?

我的项目树

核心/c/{*.c,*.h} 核心/c/包括/{jni,lib}

我的build.gradle

代码语言:javascript
复制
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"
                                }
                        }
                }
        }
}

错误

在执行模型规则时引发的异常: org.gradle.nativeplatform.toolchain.internal.gcc.GccToolChain.类型的工具链“GCC”(GNU )的toolChains {.}@ build.gradle第23行第2列无法获得未知属性“cCompiler”

EN

回答 1

Stack Overflow用户

发布于 2016-07-18 20:23:52

class没有属性cCompiler,这就是您获得错误的原因。cCompiler实际上是GccPlatformToolchain的一个属性。Gcc有一个或多个平台工具链的实例。如果要将标志应用于Gcc工具链中的每个平台,可以使用eachPlatform,例如:

代码语言:javascript
复制
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"
                }
            }
        }
    }
}

我相信,您还可以为给定的操作系统/体系结构定义自定义平台,然后引用Gcc块中的平台,而不是使用if语句,后者可能更简洁、更实用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38423241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档