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

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

本文关键字:not found arm-linux-androideabi-g++ NDK Android      更新时间:2023-10-16

我正在尝试在我刚刚安装的新 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 时忘记了什么吗?

谢谢。

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

幸运的是,我们可以通过安装独立工具链来解决这个问题 - 它实际上具有您缺少的确切内容,一个通用的交叉编译器arm-linux-androideabi而不是其他一些更晦涩的,特定于供应商/平台的交叉编译器/工具链,例如 armv7a-marvell-linux-android 这是 marvell 使用的,或者arm-linux-android是 Clang 使用的。有关 Clang 的更多信息,请查看此处。不过我可能是错的,Clang实际上开箱即用地生成了一个arm-linux-androideabi工具链,但我不确定。我知道你可以很容易地使用它,我只是不确定它是否可以"开箱即用",这就是你正在寻找的。"其余工作"只是一些路径导出 - 但仍然如此。我们的目标是在这里找到最懒惰的解决方案。

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

但是,如果您喜欢冒险 - 您可以使用crosstool-ng工具自由制作自己的交叉编译器(或整个工具链!但是,请尝试坚持使用Linaro libc分支;个人经验告诉我,一个人以某种方式效果最好,造成的问题/浪费时间最少。

另外,请确保为您的架构(架构(和操作系统下载正确的版本,32位与64位在这里也很重要。经过长时间的讨论,我们意识到这是一个"32位与64位"的问题。这里有一个链接可以阅读更多关于它的信息。