Android NDK - arm-linux-androideabi-g ++:未找到

时间:2016-02-03 13:23:39

标签: android c++ linux android-ndk cross-compiling

我正在尝试为刚安装的新Ubuntu中的Android目标构建C ++ POCO库。

我在/home/user/dev/Android/android-ndk-r9-x86安装了Android NDK,并使用以下方法在环境变量中添加了NDK的路径:

export ANDROID_NDK_ROOT=/home/user/dev/Android/android-ndk-r9-x86

要构建库,我首先移动到POCO库的根目录,然后使用以下命令对其进行配置:

./configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL --static --config=Android

因此,它编译静态.a库,不编译我不想要的模块并编译为Android目标。

但是调用make会导致以下错误:

user@user-VirtualBox:~/dev/Lib/POCO/poco-1.6.1$ make
make -C /home/user/dev/Lib/POCO/poco-1.6.1/Foundation
make[1]: Entering directory `/home/user/dev/Lib/POCO/poco-1.6.1/Foundation'
** Compiling src/ArchiveStrategy.cpp (debug, static)
arm-linux-androideabi-g++  -Iinclude -I/home/user/dev/Lib/POCO/poco-1.6.1/CppUnit/include -I/home/user/dev/Lib/POCO/poco-1.6.1/CppUnit/WinTestRunner/include -I/home/user/dev/Lib/POCO/poco-1.6.1/Foundation/include -I/home/user/dev/Lib/POCO/poco-1.6.1/XML/include -I/home/user/dev/Lib/POCO/poco-1.6.1/JSON/include -I/home/user/dev/Lib/POCO/poco-1.6.1/Util/include -I/home/user/dev/Lib/POCO/poco-1.6.1/Net/include -mthumb -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions -DPOCO_BUILD_HOST=user-VirtualBox  -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY  -g -D_DEBUG  -c src/ArchiveStrategy.cpp -o /home/user/dev/Lib/POCO/poco-1.6.1/Foundation/obj/Android/armeabi/debug_static/ArchiveStrategy.o
sh: 1: arm-linux-androideabi-g++: not found
make[1]: *** [/home/user/dev/Lib/POCO/poco-1.6.1/Foundation/obj/Android/armeabi/debug_static/ArchiveStrategy.o] Error 127
make[1]: Leaving directory `/home/user/dev/Lib/POCO/poco-1.6.1/Foundation'
make: *** [Foundation-libexec] Error 2

Make似乎无法找到用于Android的编译器,我不明白为什么?我错过了什么?在安装""安装" NDK?

谢谢。

1 个答案:

答案 0 :(得分:4)

您获得的错误是由于缺少工具链调用引起的 - 相反,arm-linux-androideabi-g++命令/可执行文件/二进制文件无处可寻。

幸运的是,我们可以通过安装Standalone toolchain来解决这个问题 - 一个实际上有一个你想要的东西,一个通用的arm-linux-androideabi交叉编译器而不是其他一些,更多一点模糊的,特定于供应商/平台的交叉编译器/工具链,例如marvell使用的armv7a-marvell-linux-android或者CLang使用的arm-linux-android。有关CLang的更多信息,look here。我可能错了,而CLang实际上开箱即用了arm-linux-androideabi工具链,但我不确定。我知道你可以轻松使用它,我只是不确定它是否可以“开箱即用”,这是你正在寻找的。 “剩下的工作”只是出口的几条路径 - 但仍然如此。我们的目标是这里最懒惰的解决方案。

独立工具链应该足以完成您的任务,因此请尽可能多地使用它而不是任何其他交叉编译解决方案。

但是,如果您有冒险精神 - 您可以使用crosstool-ng工具自由创建自己的交叉编译器(或整个工具链!)。但是,尽量坚持使用Linaro libc分支;个人经历告诉我,一个人以某种方式工作最好,并导致最少的问题/浪费时间。

编辑:

另外,请确保为您的架构(arch)和操作系统下载正确的版本,32位与64位也是如此。经过长时间的讨论,我们意识到这是一个“32位对64位”的问题。 Here's a link了解更多信息。