如何添加到的libc android应用? [英] How to add libc to android application?

查看:736
本文介绍了如何添加到的libc android应用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写一个C code,我想使用NDK android系统中运行。我在code glibc库,这是我的理解是直接难以端口。因此,我试图用libc的,而不是从GitHub上仿生库。我同时建立它面临着许多错误。

谁能解释如何包含在每一步过程的libc(或指导我一些源)。我寻觅了很多,无法在任何地方找到一个教程。

这是我得到的错误:

 在文件从JNI包含/的libc /私营/ ScopedPthreadMutexLocker.h:22:0,
                     从JNI /的libc /仿生/ malloc_debug_common.cpp:47:
    JNI /的libc /私营/ bionic_macros.h:27:31:警告:违约和删除功能仅适用于-std = C ++ 11或-std = GNU ++ 11 [默认启用]
       类型名(常量类型名和放大器;)=删除; \\
                                   ^
    JNI /的libc /私营/ ScopedPthreadMutexLocker.h:37:3:注意:宏'DISALLOW_COPY_AND_ASSIGN扩张
       DISALLOW_COPY_AND_ASSIGN(ScopedPthreadMutexLocker);
       ^
    JNI /的libc /私营/ bionic_macros.h:28:37:警告:违约和删除功能仅适用于-std = C ++ 11或-std = GNU ++ 11 [默认启用]
       void运算符=(const的类型名和放大器;)=删除
                                         ^
    JNI /的libc /私营/ ScopedPthreadMutexLocker.h:37:3:注意:宏'DISALLOW_COPY_AND_ASSIGN扩张
       DISALLOW_COPY_AND_ASSIGN(ScopedPthreadMutexLocker);
       ^
    20:在文件从JNI /的libc /仿生/ jemalloc.h包括0,
                     从JNI /的libc /仿生/ malloc_debug_common.cpp:50:
    JNI /的libc / jemalloc / jemalloc.h:108:36:错误:C函数的声明为size_t malloc_usable_size(无效*)'与冲突
     #定义JEMALLOC_CXX_THROW掷()
                                        ^
    JNI /的libc / jemalloc / jemalloc.h:231:43:注意:宏'JEMALLOC_CXX_THROW扩张
         JEMALLOC_USABLE_SIZE_CONST无效* PTR)JEMALLOC_CXX_THROW;
                                               ^
    从/home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/string.h:33:0包含在文件中,
                     从/home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/signal.h:35,
                     从/home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/pthread.h:33,
                     从JNI /的libc /仿生/ malloc_debug_common.h:36,
                     从JNI /的libc /仿生/ malloc_debug_common.cpp:40:
    /home/yogi/android-ndk/platforms/android-21/arch-arm/usr/include/malloc.h:36:15:错误:previous宣言为size_t malloc_usable_size(常量无效*)'在这里
     EXTERN为size_t malloc_usable_size(常量无效* P);
                   ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:51:27:错误:'je_calloc在此范围未声明
     #定义的malloc(功能)je_ ##功能
                               ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:67:3:注意:宏'的malloc'的扩张
       的malloc(释放calloc)
       ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:51:27:错误:'je_free在此范围未声明
     #定义的malloc(功能)je_ ##功能
                               ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:68:3:注意:宏'的malloc'的扩张
       的malloc(免费),
       ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:51:27:错误:'je_malloc在此范围未声明
     #定义的malloc(功能)je_ ##功能
                               ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:70:3:注意:宏'的malloc'的扩张
       的malloc(malloc的)
       ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:51:27:错误:'je_malloc_usable_size在此范围未声明
     #定义的malloc(功能)je_ ##功能
                               ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:71:3:注意:宏'的malloc'的扩张
       的malloc(malloc_usable_size)
       ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:51:27:错误:'je_posix_memalign没有在这个范围内声明
     #定义的malloc(功能)je_ ##功能
                               ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:73:3:注意:宏'的malloc'的扩张
       的malloc(posix_memalign)
       ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:51:27:错误:'je_realloc在此范围未声明
     #定义的malloc(功能)je_ ##功能
                               ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:77:3:注意:宏'的malloc'的扩张
       的malloc(realloc的)
       ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:51:27:错误:'je_valloc在此范围未声明
     #定义的malloc(功能)je_ ##功能
                               ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:79:3:注意:宏'的malloc'的扩张
       的malloc(valloc)
       ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:在功能无效get_malloc_leak_info(uint8_t有**,*为size_t,为size_t *,为size_t *,为size_t *):
    JNI /的libc /仿生/ malloc_debug_common.cpp:191:96:错误:'je_malloc在此范围未声明
       HashEntry **名单=的static_cast< HashEntry **指(的malloc(malloc的)(的sizeof(无效*)* g_hash_table.count));
                                                                                                    ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:214:22:错误:'je_free在此范围未声明
         的malloc(免费)(列表);
                          ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:236:20:错误:'je_free在此范围未声明
       的malloc(免费)(列表);
                        ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:在功能无效free_malloc_leak_info(uint8_t有*):
    JNI /的libc /仿生/ malloc_debug_common.cpp:240:20:错误:'je_free在此范围未声明
       的malloc(免费)(信息);
                        ^
    JNI /的libc /仿生/ malloc_debug_common.cpp:在功能为size_t malloc_usable_size(常量无效*):
    JNI /的libc /仿生/ malloc_debug_common.cpp:262:53:错误:C函数'为size_t malloc_usable_size(常量无效*)'的声明与冲突
     为externC为size_t malloc_usable_size(常量无效* MEM){
                                                         ^
    20:在文件从JNI /的libc /仿生/ jemalloc.h包括0,
                     从JNI /的libc /仿生/ malloc_debug_common.cpp:50:
    JNI /的libc / jemalloc / jemalloc.h:70:33:错误:previous宣言为size_t malloc_usable_size(无效*)'在这里
     #定义je_malloc_usable_size malloc_usable_size
                                     ^
    JNI /的libc / jemalloc / jemalloc.h:230:41:注意:宏'je_malloc_usable_size扩张
     JEMALLOC_EXPORT为size_t JEMALLOC_NOTHROW je_malloc_usable_size(
                                             ^
    使:*** [OBJ /本地/ armeabi-V7A / OBJ文件/ C /仿生/ malloc_debug_common.o]错误1

如何解决呢?
谢谢!


解决方案

  

我试图用libc的,而不是从GitHub上仿生库。


看来,您复制仿生libc中到您的项目,并试图建立它。

不要:一种prebuilt副本的的提供给你作为NDK的一部分,你的不需要做任何事特别的使用它:NDK的提供的编译器会自动做

您应该专注于构建应用程序,而不是随意复制的libc变种,并试图建立他们。

I am writing a C code which I wish to run in android using ndk. I have glibc library in the code which as I understood is difficult to port directly. Hence I tried to use libc instead from the bionic repository in github. I am facing numerous errors while building it.

Could anyone explain how to include libc in a step by step procedure(or guide me to some source). I have searched a lot and was unable to find a tutorial anywhere.

These are the errors I get:

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

How to fix it? Thanks!

解决方案

I tried to use libc instead from the bionic repository in github.

It appears that you've copied Bionic libc into your project, and are trying to build it.

Don't. A prebuilt copy is already provided to you as part of the ndk, and you don't need to do anything special to use it: the ndk-provided compiler will do that automatically.

You should concentrate on building your application, not copying random libc variants and trying to build them.

这篇关于如何添加到的libc android应用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆