有谁知道我在哪里可以找到旧版本的Android NDK?我们的代码不是用r6构建的.当然必须存在某个存档版本.
我正在尝试使用android-ndk-r5独立工具链和autotools编译库.在执行./configure时,它失败了:
$ ./configure --host=arm-linux-androideabi ...snip... checking host system type... Invalid configuration `arm-linux-androideabi': system `androideabi' not recognized configure: error: /bin/sh ./config.sub arm-linux-androideabi failed
显式设置CC和CXX也不起作用(configure表示使用--host).
NDK文档和各种在线资料似乎表明以这种方式使用独立工具链应该是可能的.这有什么不对?我该如何解决?(除了简单地放弃autoconf并回到Android.mk)
我有问题移植并使用Android-ndk-r5b将boost库链接到android.我首先使用以下步骤构建boost库(没有mpi,python):
# if [ os.name ] = "NT" { api = win32 ; }
androidNDKRoot = ../android-ndk-r5b ;
using gcc : android4.4.3 : $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-g++.exe :
--sysroot=$(androidNDKRoot)/platforms/android-3/arch-arm
-mthumb
-Os
-fno-strict-aliasing
-O2
-DNDEBUG
-g
-fexceptions
-frtti
-lstdc++
-I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/include
-I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include
-D__GLIBC__
-DBOOST_NO_INTRINSIC_WCHAR_T
$(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar.exe
$(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ranlib.exe
linux
;
bjam.exe --user-config=user-config.jam --without-python --without-mpi toolset=gcc-android4.4.3 link=static runtime-link=static target-os=linux --stagedir=android > d:\out.txt
APP_STL := gnustl_static APP_PLATFORM := android-3 APP_CPPFLAGS += -mthumb APP_CPPFLAGS += -Os APP_CPPFLAGS += -fno-strict-aliasing APP_CPPFLAGS += -O2 APP_CPPFLAGS += -DNDEBUG APP_CPPFLAGS …
我有一个C++ Android应用程序,我正在尝试使用ndk-gdb进行调试.应用程序确实使用多个线程,但据推测,ndk的r5支持多个线程.此外,我甚至没有达到gdb启动的程度.我运行命令:
ndk-gdb --start --force --verbose
Run Code Online (Sandbox Code Playgroud)
然后它找到ndk和sdk(或至少adb)的正确路径,以及所需的ABI和诸如此类的东西.
$ ndk-gdb --start --force --verbose
Android NDK installation path: /home/leif/eclipse/android-ndk-r5b
Using default adb command: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.26
Using final ADB command: '/home/leif/eclipse/android-sdk-linux_86/platform-tools/adb'
Using auto-detected project path: .
Found package name: net.leifandersen.mobile.android.marblemachine
ABIs targetted by application: armeabi
Device API Level: 10
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Run Code Online (Sandbox Code Playgroud)
然后它查找gdb服务器,并找到它,包括正确的PID,然后启动活动.
但是,它告诉我无法找到包:
Setup network redirection
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb shell run-as <package name> lib/gdbserver +debug-socket --attach 16040
## COMMAND: …Run Code Online (Sandbox Code Playgroud) 我试图了解独立工具链的含义.以下是我的发现.一个工具链,可以使用所有配置,即正确路径中的系统头和库.对于Android,它还会在工具链可以查找的路径中包含API标头.为何"独立"这个词?这可能与常规工具链的不同之处在于RT需要配置并准备好供android使用sysroot和libc标题路径等等.请注释.
嗯,我正在为android编译,一个进程正在运行一个名为make-standalone-toolchain.sh的脚本,创建了一个独立的工具链.我正在通过这个脚本来了解这是做什么的.不太擅长shell脚本.但是做了一些事情.""生成包含工作sysroot的自定义Android工具链安装.结果可以更容易地用作独立的交叉编译器,例如运行configure和make脚本." - tool链接ndk-dir package-dir系统平台变量设置Compute source sysroot SRC_SYSROOT ="$ NDK_DIR /平台/ $ PLATFORM arch- $ ARCH"复制sysroot头文件和库...... libstdc ++头文件和库...预构建的二进制文件.然后进入一个临时文件夹,然后从Tmp目录复制到安装目录创建一个tar即一个包文件来添加tmpdir想要知道这里到底发生了什么或链接或建议在哪里look.but ofcourse不想阅读非常精细的手册.〜
我正在尝试从http://developer.nvidia.com/tegra-resources,在android ndk示例,libs文件夹中编译nvfile库.无论如何,因为我并不真的需要整套库,所以我拿出了我需要的库,看起来它的依赖性.这是用于编译它们的Android.mk文件.
include $(CLEAR_VARS)
LOCAL_MODULE := nvthread
LOCAL_CFLAGS := -Wall -g
LOCAL_LDFLAGS := -Wl,-Map,xxx.map
LOCAL_SRC_FILES := nv/nv_thread/nv_thread.c
LOCAL_C_INCLUDES := nv
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := nvfile
LOCAL_CFLAGS := -Wall -g
LOCAL_LDFLAGS := -Wl,-Map,xxx.map
LOCAL_SRC_FILES := nv/nv_file/nv_file.c
LOCAL_C_INCLUDES := nv
LOCAL_STATIC_LIBRARIES := nvthread nvapkfile
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := nvapkfile
LOCAL_CFLAGS := -Wall -g
LOCAL_LDFLAGS := -Wl,-Map,xxx.map
LOCAL_SRC_FILES := nv/nv_apk_file/nv_apk_file.c
LOCAL_C_INCLUDES := nv
LOCAL_STATIC_LIBRARIES := nvthread
include $(BUILD_STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
nvapkfile库似乎能够很好地与nvthread链接,但是nvfile库似乎根本不想链接到nvapkfile库.源代码中的include文件工作正常,只是每当我尝试编译它时,我得到一个未定义的引用.以下是输出示例:
/home/leif/MarbleMachine/android/obj/local/armeabi/libnvfile.a(nv_file.o): In function `NvFInit':
/home/leif/MarbleMachine/android/jni/nv/nv_file/nv_file.c:49: undefined reference to …Run Code Online (Sandbox Code Playgroud) 我试图使用Ubuntu 10.10上的r5b NDK为Android平台交叉编译我们的C++代码库(使用CMake).编译阶段成功,但是在.so的最后一个链接阶段,有许多未解析的对libsupc ++中的符号的引用.一个文件(我指定链接).我也尝试过-lsupc ++没有区别.
在构建test-gnustl-1 NDK测试应用程序时,我尝试尽可能地遵循官方ndk-build系统生成的命令行.
在arm-linux-androideabi/lib/libsupc ++上运行arm-linux-androideabi-nm工具.文件显示错误输出中引用的符号(T).
它无法找到的libsupc ++中定义的符号示例如下: __gxx_personality_v0
这是我的示例链接行和错误的结果示例.
/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -fPIC -Wall -Wextra -Wno-unused -Wno-multichar -fno-rtti -MMD -MP -MF -ffunction-sections -fexceptions -funwind-tables -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -O0 -DDEBUG -D_DEBUG -g --sysroot=/home/user/android-ndk-r5b/platforms/android-9/arch-arm -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined,-z,noexecstack -L/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib -L/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib -Wl,-rpath-link=/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib /home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libstdc++.a -lc -lsupc++ -shared -o ../../lib/Debug/libFoo.so CMakeFiles/Foo.dir/Foo.c.o CMakeFiles/Foo.dir/Bar.cpp.o CMakeFiles/Foo.dir/Baz.cpp.o
`CMakeFiles/Foo.dir/Foo.cpp.o: In function 'myFunc':
/home/user/myroj/src/native/modules/libFoo/Foo.cpp:292: undefined reference to '__cxa_end_cleanup'
CMakeFiles/Foo.dir/Foo.cpp.o:(.ARM.extab.text.myFunc+0x0): undefined reference to '__gxx_personality_v0'
...
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:350: undefined reference to '__cxa_begin_catch' …Run Code Online (Sandbox Code Playgroud) 在我的新项目中,我需要基于交流编写的项目.而且我知道我可以使用NDK来完成它,但这里有一个问题:如何将标准重写Makefile为Android.mk?而且,在Android中,我可以忽略ndk,使用jni直接构建项目来使c项目适应android项目吗?还有想法让c项目适应android项目吗?谢谢.最后,这是Makefile:
# Makefile.in generated by automake 1.10.1 from Makefile.am.
# Makefile. Generated from Makefile.in by configure.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in …Run Code Online (Sandbox Code Playgroud) 我有一个VOIP应用程序,引擎部分是C(NDK)级别.随机使用应用程序我以ANR指向"at android.os.MessageQueue.nativePollOnce(Native Method)"结束.
使用android-ndk-r5
ANR痕迹:
----- pid 13735 at 2013-05-23 15:56:47 -----
Cmd line: com.myapp.voip
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)
"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41315508 self=0x413058e8
| sysTid=13735 nice=0 sched=0/0 cgrp=apps handle=1074442032
| schedstat=( 23115964360 3706387400 21258 ) utm=1651 stm=660 core=3
#00 pc 0000da70 /system/lib/libc.so (epoll_wait+12)
#01 pc 00014899 /system/lib/libutils.so (android::Looper::pollInner(int)+96)
#02 pc 00014b01 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+104)
#03 pc 00063443 /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
#04 pc 0001de70 /system/lib/libdvm.so (dvmPlatformInvoke+112)
#05 …Run Code Online (Sandbox Code Playgroud) android libc android-ndk-r5 android-anr-dialog android-activity