android-NDK构建器r15找不到某些构建目标的HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC或pthread_condattr_setclock;构建失败

android-NDK构建器r15找不到某些构建目标的HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC或pthread_condattr_setclock;构建失败,第1张

概述我的项目中有一些本机代码.我使用pthread具有单调的时间.但是我在NDK开发方面并不出色.用单调时钟初始化和使用条件的C代码:intinitMonotonicCond(pthread_cond_t*cond){intresult=0;#ifdefHAVE_PTHREAD_COND_TIMEDWAIT_MONOTONICresult=pthread_cond_init(c

我的项目中有一些本机代码.我使用pthread具有单调的时间.但是我在NDK开发方面并不出色.

用单调时钟初始化和使用条件的C代码:

int initMonotonicCond(pthread_cond_t *cond) {    int result = 0;#ifdef HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC    result = pthread_cond_init(cond, NulL);#else    pthread_condattr_t cond1attr;    result |= pthread_condattr_init(&cond1attr);    result |= pthread_condattr_setclock(&cond1attr, CLOCK_MONOTONIC);    result |= pthread_cond_init(cond, &cond1attr);    pthread_condattr_destroy(&cond1attr);#endif    return result;}voID monothonicWait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *ts) {#ifdef HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC    pthread_cond_timeDWait_monotonic_np(cond, mutex, ts);#else    pthread_cond_timeDWait(cond, mutex, ts);#endif}

Gradle用以下命令构建ndk项目

androID {    compileSdkVersion 25    buildToolsversion "25.0.2"    defaultConfig {        minSdkVersion 16        targetSdkVersion 24    }    buildTypes {        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID.txt'), 'proguard-rules.pro'            externalNativeBuild {                cmake {                    cppFlags "-fexceptions -frtti -fPIE -fPIC"                    abiFilters "armeabi-v7a", "armeabi", "arm64-v8a", "x86", "x86_64", "mips", "mips64"                }            }        }        deBUG {            externalNativeBuild {                cmake {                    cppFlags "-fexceptions -frtti -fPIE -funwind-tables -DDEBUG -fPIC"                    abiFilters "armeabi"                }            }        }    }.....}

最近,我已将AndroID Studio和所有SDK内容更新为较新的版本.我猜是ndk构建到r15.
现在在构建时出现错误:

错误:(155,15)错误:使用未声明的标识符’pthread_condattr_setclock’;您是说’pthread_condattr_setpshared’吗?

经过一些研究,我发现现在应该为非x64目标(“ armeabi-v7a”,“ armeabi”,“ x86”,“ mips”)定义HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC(和pthread_cond_timeDWait_monotonic_np).并已定义.但是现在还没有定义.

因此,“ armeabi-v7a”,“ x86”,“ mips”还没有定义HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC或pthread_condattr_setclock都没有定义,因此我的项目无法针对这些目标构建.

那么,这是什么原因,我有什么选择?

我不应该以单声道方式等待该目标吗?

我不应该为那些目标而建造吗?

我应该还原到较旧的NDK吗?

还是我应该写信给Google网上论坛?

解决方法:

pthread_condattr_setclock已在androID-21:https://android.googlesource.com/platform/bionic/+/master/libc/libc.map.txt#780中添加,因此这就是为什么您无法在较早版本上访问它的原因.

HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC显然是在旧标题中定义的.确实不应该这样(无论如何都不用这个名字).像这样的名称是autoconf生成的事物所使用的约定,我们不应重叠,因为这可能会引起amcro重新定义警告.编写此检查的更好方法是:

#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21

但是,这还不足以让您再次构建,因为在添加了实际的POSIX API时,标头中就消失了pthread_cond_timeDWait_monotonic_np的声明.为了兼容起见,我刚刚上传了一个更改以重新添加声明:https://android-review.googlesource.com/420945

不幸的是,现在将它纳入r15b为时已晚.同时,您可以做的就是为该函数添加自己的声明:

extern "C" int pthread_cond_timeDWait_monotonic_np(    pthread_cond_t*, pthread_mutex_t*, const struct timespec*);
总结

以上是内存溢出为你收集整理的android-NDK构建器r15找不到某些构建目标的HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC或pthread_condattr_setclock;构建失败全部内容,希望文章能够帮你解决android-NDK构建器r15找不到某些构建目标的HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC或pthread_condattr_setclock;构建失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1080360.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存