Articles of Android的NDK

有没有办法让Android NDK-build使用更新版本的gcc?

我安装了Android NDK r5b Windows版本,我使用cygwin编译C代码。 我看到NDK-build实际上正在调用C:\ android-ndk-r5b \ toolchains \ arm-linux-androideabi-4.4.3 \ prebuilt \ windows \ bin \ arm-linux-androideabi-gcc-4.4.3。 我想知道是否有办法让NDK-build使用更新版本的gcc? 我想这样做的原因是: Gcc4.4.3已经知道为某些NEON内在函数生成非最佳汇编代码的错误 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43118 http://hilbert-space.de/?p=22 新发布的GCC 4.6声称它对ARM和内在函数有一些改进。 所以我想尝试让NDK-build使用GCC4.6。

为android编译C库

作为一个概念certificate,我正在尝试编译和利用这个库的function为Android应用程序。 我正在使用android工作室。 到目前为止我所做的是: 已安装NDK和SDK(如果可能,我想以android 4.0.3及更高版本为目标) 在Android Studio中创建了一个Android项目 在中创建了JNI文件夹 在我的JNI文件夹中存储库的所有内容 将我的build.gradle链接到源中存在的Android.MK文件 externalNativeBuild { ndkBuild { path ‘src/main/jni/Android.mk’ } } 设置ProductFlavors以避免尝试为库不支持的体系结构进行构建(我可能已经错了) productFlavors { dev { ndk.abiFilters ‘x86’, ‘armeabi’, ‘armeabi-v7a’ } develx86 { ndk.abiFilters ‘x86’, ‘armeabi’, ‘armeabi-v7a’ } production { ndk.abiFilters ‘x86’, ‘armeabi’, ‘armeabi-v7a’ } productionx86 { ndk.abiFilters ‘x86’, ‘armeabi’, ‘armeabi-v7a’ } } 在这一点上,我注意到有些像cpu-miner.c这样的文件缺失,有些包括突出显示它们缺失,具体而言 #include #include ` 所以我去了这两个库的官方网站并下载了源代码,创建了两个相应的文件夹并将所有文件放在那里。 […]

在Android平台上使用dlclose(…)时出现分段错误

在Android上使用动态加载API( : dlopen() , dlclose()等)时遇到一些问题。 我正在使用NDK独立工具链(版本8)来编译应用程序和库。 Android版本是2.2.1 Froyo。 这是简单共享库的源代码。 #include int iii = 0; int *ptr = NULL; __attribute__((constructor)) static void init() { iii = 653; } __attribute__((destructor)) static void cleanup() { } int aaa(int i) { printf(“aaa %d\n”, iii); } 这是使用上述库的程序源代码。 #include #include #include int main() { void *handle; typedef int (*func)(int); func bbb; […]

C ++ 11 cmath函数不在android NDK w / gcc-4.8或clang 3.4的std命名空间中

在C ++ 11之后,当包含头时,先前在全局命名空间中的各种cmath函数被移动到std命名空间。 然而,android NDK构建存在问题,包括gcc-4.8和clang-3.4工具链。 正确指定了C++11标志,因为像unique_ptr这样的其他c ++ 11特性工作正常。 如果我尝试使用std::round或std::cbrt ,编译器会说这些在std:: namespace中不存在,他们应该[1]。 它们存在于全局命名空间中,但我不想使用它们。 这是一个已知的问题? 我忽略了什么吗? 有解决方法吗? [1] http://en.cppreference.com/w/cpp/header/cmath 使用gcc-4.8.1桌面版本没有这个问题,我最全面地使用gcc警告-Wall -Wextra -Wcast-align -Wcast-qual -fpermissive -Wconversion -Wdisabled-optimization -Weffc++ -Wfloat-equal -Wformat=2 -Wimport -Winit-self -Winline -Winvalid-pch -Wlong-long -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wstack-protector -Wstrict-aliasing=2 -Wunreachable-code -Wunsafe-loop-optimizations -Wunused -Wvariadic-macros -Wwrite-strings -pedantic -pedantic-errors -Woverloaded-virtual -Wswitch-enum -Werror 相关的构建命令,它的所有荣耀: /opt/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP […]

堆栈跟踪在到达我的代码之前停止(在使用NDK的Android上)

我正在使用NDK r5b在Android 2.3.x上进行开发。 偶尔我的代码会崩溃,我想知道在哪里。 当我有一个指针(即来自Android的堆栈跟踪)时,我已经知道如何在我的应用程序中获取相应的行。 但是,我经常看到像这样无用的堆栈跟踪(完整堆栈跟踪): #00 pc 0006561a /system/lib/egl/libGLESv2_adreno200.so #01 pc 0006b900 /system/lib/egl/libGLESv2_adreno200.so #02 pc 0005aac8 /system/lib/egl/libGLESv2_adreno200.so #03 pc 0001687a /system/lib/egl/libGLESv1_CM_adreno200.so #04 pc 000096ce /system/lib/egl/libGLESv1_CM_adreno200.so 或这个: (gdb) bt #0 0xafd0c51c in epoll_wait () from /Volumes/SecureCode/webos/rta/android/obj/local/armeabi/libc.so #1 0xa81216a6 in ?? () 甚至根本没有提到我的代码。 有没有办法获得比这更好的堆栈跟踪? 为什么某些库函数“不透明”,因为它们不允许回溯“透视”到调用函数,导致堆栈跟踪中的停止? 据我所知,调试这样的问题的唯一方法是在程序中的每个点使用日志记录和/或使用gdb逐步执行每一行。 是否有ROM可用于这些Android库的调试版本而不是运行时库,这会有帮助吗? (我只使用一部手机进行开发,所以我不担心保持全部function。)( 实际上 ,我注意到上面gdb堆栈跟踪中libc.so的路径在我的应用程序目录中。我可能只是打包它有一个不同的(调试) libc.so ,这会有帮助吗?) 最后一件事可能有所帮助:在logcat(第一个)的上述堆栈跟踪中,我的库在原始堆栈转储中被提及: stack: … … […]

Android NDK,两个静态库和链接

我开始创建库作为共享库,但我认为创建一个共享库和其余的静态更高效。 当它全部共享时,它编译和链接很好,但转移到静态,我得到链接“未定义的引用”。 编辑:我在一个Android.mk构建所有库 Android.mk: MY_LOCAL_PATH := $(call my-dir) MY_LOCAL_CFLAGS := -DDEBUG TARGET_PLATFORM := ‘android-4’ LOCAL_PATH := $(MY_LOCAL_PATH)/../../Base include $(CLEAR_VARS) LOCAL_MODULE := Base LOCAL_SRC_FILES := include $(BUILD_STATIC_LIBRARY) MY_LOCAL_STATIC_LIBRARIES := Base MY_LOCAL_C_INCLUDES := $(MY_LOCAL_PATH)/../../Base LOCAL_PATH := $(MY_LOCAL_PATH)/../../Framework include $(CLEAR_VARS) LOCAL_MODULE := Framework LOCAL_C_INCLUDES := $(MY_LOCAL_C_INCLUDES) LOCAL_SRC_FILES := LOCAL_CFLAGS := $(MY_LOCAL_CFLAGS) include $(BUILD_STATIC_LIBRARY) MY_LOCAL_STATIC_LIBRARIES += Framework MY_LOCAL_C_INCLUDES += […]

Android NDK:错误:必须使用-std = c ++ 11或-std = gnu ++ 11编译器选项启用

我想在我的android应用程序中使用一个大的c ++库。 我正在使用eclipse与android ndk插件。 当我运行它时,我收到此错误消息; This file requires compiler and library support for the ISO C++ 2011 standard.This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. 我该怎么办? 如何在eclipse中启用此选项?

无法将ndk-gdb附加到Android应用程序

我试图将ndk-gdb附加到我的Android应用程序。 我使用的是Android-ndk-r6b ,设备是Android 2.3,三星Galaxy S II。 我按照本例中的所有步骤单击此处查看示例 当我尝试将gdb与另一个应用程序连接时,我尝试使用一个应用程序,但是详细说明它总是附加到第一个应用程序本身 Found package name: 我第一次尝试使用此命令启动ndk-gdb : ndk-gdb –start –force –verbose 我尝试使用以下命令附加到另一个应用程序但无法成功: ndk-gdb –launch=com.example.hellogdbserver.HelloGdbServer –force –verbose 第一次申请我总是得到以下错误: ERROR: Non-debuggable application installed on the target device.Please re-install the debuggable version! 这是我得到的完整的shell日志 sh-4.1$ ndk-gdb –verbose –start –force Android NDK installation path: /cygdrive/c/Android/android-ndk Using default adb command: /cygdrive/c/Android/android-sdk-windows/platform-tools/adb ADB version found: Android […]

我们可以为android-ndk r10c中的共享库启用pie(即Position Independent Executables)吗?

我们可以为android-ndk r10c中的共享库启用pie(即Position Independent Executables)吗? 如果是,那该怎么做? 我读到我们应该使用PIC作为动态库,PIE作为可执行文件,但看起来像android NDK不支持PIC。 我尝试在LDFLAGS中启用-pie标志,但我收到以下错误: /android-ndk-r10c/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o: in function _start:crtbrand.c(.text+0x8c): error: undefined reference to ‘main’ 请帮我解决这个问题,因为我已经读到谷歌将在即将到来的Android版本中强制执行PIE,所以我希望我的应用程序与ANDROID-L +兼容。

无法在osx yosemite上从gradle在Android工作室上运行ndk-build

我想在MAC OSX Yosemite的Android Studio 1.0项目中从我的build.gradle运行ndk-build。 task ndkBuild(type: Exec) { commandLine ‘ndk-build’, ‘-C’, file(‘src/main’).absolutePath } 我在local.properties文件中指定了ndk-dir,但是我收到了这个错误 A problem occurred starting process ‘command ‘ndk-build’ 如果我从命令行运行gradle脚本,那么一切都成功构建 ./gradlew :myproject:assembleDebug 因此,由于某种原因,IDE无法调用ndk-build。 我在Android studio中启用了一些调试信息,我有以下错误 Caused by: java.io.IOException: error=2, No such file or directory 因此IDE无法findndk-build exe,但是从IDE内部的终端运行可以findndk-build exe。 谢谢