2015-10-12 5 views
2

Я пишу код C, который я хочу запустить в android, используя ndk. У меня есть библиотека glibc в коде, который, как я понял, трудно переносить напрямую. Поэтому я попытался использовать libc вместо этого из бионического репозитория в github. При создании я сталкиваюсь с многочисленными ошибками.Как добавить libc в приложение для Android?

Может ли кто-нибудь объяснить, как включить libc в пошаговую процедуру (или вести меня к некоторому источнику). Я много искал и не мог найти учебник нигде.

Эти ошибки я получаю:

In file included from jni/libc/private/ScopedPthreadMutexLocker.h:22:0, 
        from jni/libc/bionic/malloc_debug_common.cpp:47: 
    jni/libc/private/bionic_macros.h:27:31: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 [enabled by default] 
     TypeName(const TypeName&) = delete;  \ 
           ^
    jni/libc/private/ScopedPthreadMutexLocker.h:37:3: note: in expansion of macro 'DISALLOW_COPY_AND_ASSIGN' 
     DISALLOW_COPY_AND_ASSIGN(ScopedPthreadMutexLocker); 
    ^
    jni/libc/private/bionic_macros.h:28:37: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 [enabled by default] 
     void operator=(const TypeName&) = delete 
             ^
    jni/libc/private/ScopedPthreadMutexLocker.h:37:3: note: in expansion of macro 'DISALLOW_COPY_AND_ASSIGN' 
     DISALLOW_COPY_AND_ASSIGN(ScopedPthreadMutexLocker); 
    ^
    In file included from jni/libc/bionic/jemalloc.h:20:0, 
        from jni/libc/bionic/malloc_debug_common.cpp:50: 
    jni/libc/jemalloc/jemalloc.h:108:36: error: declaration of C function 'size_t malloc_usable_size(void*)' conflicts with 
    # define JEMALLOC_CXX_THROW throw() 
             ^
    jni/libc/jemalloc/jemalloc.h:231:43: note: in expansion of macro 'JEMALLOC_CXX_THROW' 
     JEMALLOC_USABLE_SIZE_CONST void *ptr) JEMALLOC_CXX_THROW; 
              ^
    In file included from /home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/string.h:33:0, 
        from /home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/signal.h:35, 
        from /home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/pthread.h:33, 
        from jni/libc/bionic/malloc_debug_common.h:36, 
        from jni/libc/bionic/malloc_debug_common.cpp:40: 
    /home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/malloc.h:36:15: error: previous declaration 'size_t malloc_usable_size(const void*)' here 
    extern size_t malloc_usable_size(const void* p); 
       ^
    jni/libc/bionic/malloc_debug_common.cpp:51:27: error: 'je_calloc' was not declared in this scope 
    #define Malloc(function) je_ ## function 
          ^
    jni/libc/bionic/malloc_debug_common.cpp:67:3: note: in expansion of macro 'Malloc' 
     Malloc(calloc), 
    ^
    jni/libc/bionic/malloc_debug_common.cpp:51:27: error: 'je_free' was not declared in this scope 
    #define Malloc(function) je_ ## function 
          ^
    jni/libc/bionic/malloc_debug_common.cpp:68:3: note: in expansion of macro 'Malloc' 
     Malloc(free), 
    ^
    jni/libc/bionic/malloc_debug_common.cpp:51:27: error: 'je_malloc' was not declared in this scope 
    #define Malloc(function) je_ ## function 
          ^
    jni/libc/bionic/malloc_debug_common.cpp:70:3: note: in expansion of macro 'Malloc' 
     Malloc(malloc), 
    ^
    jni/libc/bionic/malloc_debug_common.cpp:51:27: error: 'je_malloc_usable_size' was not declared in this scope 
    #define Malloc(function) je_ ## function 
          ^
    jni/libc/bionic/malloc_debug_common.cpp:71:3: note: in expansion of macro 'Malloc' 
     Malloc(malloc_usable_size), 
    ^
    jni/libc/bionic/malloc_debug_common.cpp:51:27: error: 'je_posix_memalign' was not declared in this scope 
    #define Malloc(function) je_ ## function 
          ^
    jni/libc/bionic/malloc_debug_common.cpp:73:3: note: in expansion of macro 'Malloc' 
     Malloc(posix_memalign), 
    ^
    jni/libc/bionic/malloc_debug_common.cpp:51:27: error: 'je_realloc' was not declared in this scope 
    #define Malloc(function) je_ ## function 
          ^
    jni/libc/bionic/malloc_debug_common.cpp:77:3: note: in expansion of macro 'Malloc' 
     Malloc(realloc), 
    ^
    jni/libc/bionic/malloc_debug_common.cpp:51:27: error: 'je_valloc' was not declared in this scope 
    #define Malloc(function) je_ ## function 
          ^
    jni/libc/bionic/malloc_debug_common.cpp:79:3: note: in expansion of macro 'Malloc' 
     Malloc(valloc), 
    ^
    jni/libc/bionic/malloc_debug_common.cpp: In function 'void get_malloc_leak_info(uint8_t**, size_t*, size_t*, size_t*, size_t*)': 
    jni/libc/bionic/malloc_debug_common.cpp:191:96: error: 'je_malloc' was not declared in this scope 
     HashEntry** list = static_cast<HashEntry**>(Malloc(malloc)(sizeof(void*) * g_hash_table.count)); 
                            ^
    jni/libc/bionic/malloc_debug_common.cpp:214:22: error: 'je_free' was not declared in this scope 
     Malloc(free)(list); 
         ^
    jni/libc/bionic/malloc_debug_common.cpp:236:20: error: 'je_free' was not declared in this scope 
     Malloc(free)(list); 
         ^
    jni/libc/bionic/malloc_debug_common.cpp: In function 'void free_malloc_leak_info(uint8_t*)': 
    jni/libc/bionic/malloc_debug_common.cpp:240:20: error: 'je_free' was not declared in this scope 
     Malloc(free)(info); 
         ^
    jni/libc/bionic/malloc_debug_common.cpp: In function 'size_t malloc_usable_size(const void*)': 
    jni/libc/bionic/malloc_debug_common.cpp:262:53: error: declaration of C function 'size_t malloc_usable_size(const void*)' conflicts with 
    extern "C" size_t malloc_usable_size(const void* mem) { 
                 ^
    In file included from jni/libc/bionic/jemalloc.h:20:0, 
        from jni/libc/bionic/malloc_debug_common.cpp:50: 
    jni/libc/jemalloc/jemalloc.h:70:33: error: previous declaration 'size_t malloc_usable_size(void*)' here 
    # define je_malloc_usable_size malloc_usable_size 
            ^
    jni/libc/jemalloc/jemalloc.h:230:41: note: in expansion of macro 'je_malloc_usable_size' 
    JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_malloc_usable_size(
              ^
    make: *** [obj/local/armeabi-v7a/objs/c/bionic/malloc_debug_common.o] Error 1 

Как это исправить? Спасибо!

+0

Какие ошибки? – 18446744073709551615

+0

@ 18446744073709551615: отредактировал вопрос. Пожалуйста, посмотрите – re3el

+0

Некоторые из них - предупреждения; они предлагают вам добавить параметры '-std = gnu ++ 11' в параметры сборки. Что касается je_ *, вы не отправили наиболее интересное сообщение об ошибке, похоже, что код пытается определить его, но что-то не работает. Что это за 'Ошибка 1'? – 18446744073709551615

ответ

1

Я попытался использовать libc вместо этого из бионического хранилища в github.

Похоже, вы скопировали Bionic libc в свой проект и пытаетесь его построить.

Не делайте этого. Предпочитаемая копия уже предоставляется вам как часть ndk, а вам не нужно ничего делать, чтобы использовать его: предоставленный ndk компилятор сделает это автоматически.

Вы должны сконцентрироваться на создании своего приложения, а не на копировании случайных вариантов libc и попытке их создания.