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

Android NDK - arm-linux-androideabi-g++: not found

我正在尝试在我刚刚为此安装的新 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 的编译器,我不知道为什么?我错过了什么? "installing" NDK 时我忘记了什么吗?

谢谢。

您遇到的错误是由缺少工具链调用引起的 - 相反,找不到 arm-linux-androideabi-g++ command/executable/binary。

幸运的是,我们可以通过安装 Standalone toolchain - that one actually has the exact thing you're missing, a general purpose arm-linux-androideabi cross-compiler instead of some other, a bit more obscure, vendor/platform-specific crosscompiler/toolchain, such as armv7a-marvell-linux-android which is what marvell uses, or arm-linux-android which is what Clang uses. For more info on Clang, look here 来解决这个问题。不过我可能是错的,Clang 实际上开箱即用地生成了一个 arm-linux-androideabi 工具链,但我不确定。我知道您可以轻松使用它,我只是不确定它是否可以使用 "straight out of the box",这正是您要寻找的。 "rest of the work" 只是一些路径导出 - 但仍然如此。我们的目标是这里最懒惰的解决方案。

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

但是,如果您喜欢冒险 - 您可以使用 crosstool-ng 工具自由制作自己的交叉编译器(或整个工具链!)。但是,尽量坚持使用 Linaro libc 分支;个人经验告诉我,一种方法效果最好,浪费的 problems/time 最少。

此外,请确保为您的体系结构 (arch) 下载正确的版本,OS,32 位与 64 位在这里也很重要。经过长时间的讨论,我们意识到这是一个“32 位与 64 位”的问题。 Here's a link 阅读更多相关信息。