如何添加到的libc android应用? [英] How to add libc to android application?
问题描述
我写一个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屋!