在android ndk中编译线程的c ++代码时,memset出错

时间:2011-12-25 14:40:33

标签: android c++ pthreads

我遇到了问题。我想用NDK r7在Android 2.3.4中创建一个线程。当我编译这段代码时:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "System.h"
#include <jni.h>
#include <pthread.h>

unsigned int CreateThread(void* function(void*) , void * context)
{   int         ret;
    pthread_t   thread;
    ret = pthread_create(&thread, NULL, function, context);
    if(ret != 0)
    {   return 0;
    }
    return (unsigned int) thread;
}

我收到以下错误消息:

E:/Code/Android/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/include/stdarg.h:102: error: expected ';' before 'typedef'
In file included from E:/Code/Android/android-ndk-r7/platforms/android-14/arch-arm/usr/include/pthread.h:32, from jni/system.cpp:13:
E:/Code/Android/android-ndk-r7/platforms/android-14/arch-arm/usr/include/signal.h: In function 'int sigemptyset(sigset_t*)':
E:/Code/Android/android-ndk-r7/platforms/android-14/arch-arm/usr/include/signal.h:84: error: 'memset' was not declared in this scope
E:/Code/Android/android-ndk-r7/platforms/android-14/arch-arm/usr/include/signal.h: In function 'int sigfillset(sigset_t*)':
E:/Code/Android/android-ndk-r7/platforms/android-14/arch-arm/usr/include/signal.h:90: error: 'memset' was not declared in this scope

我是否错过了包含或定义某些内容以获取memset错误?

我真的不确定问题是什么以及memset错误的原因。我也试过包括cstring,但后来我收到了大量的错误。

1 个答案:

答案 0 :(得分:2)

我发现了问题。我有自己的类,其文件名为“string.h”,位于我的jni目录中。因此,不包括驻留在ndk中并且具有必要的memset函数(以及其他)的声明的“string.h”。

选项是更改我的类的文件名/名称,或直接包含ndk中带有直接路径的string.h。

我选择了第一个选项并重命名了我的字符串类,并且从现在开始尝试不为我的类使用标准文件名...