我正在为刚刚安装的新的Ubuntu构build一个Android目标的C ++ POCO库。
我已经在/home/user/dev/Android/android-ndk-r9-x86
安装了Android NDK,并在环境variables中添加了NDK的path:
export ANDROID_NDK_ROOT=/home/user/dev/Android/android-ndk-r9-x86
要构build库,我首先移动到POCO库的根目录,并使用以下命令进行configuration:
./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
使似乎无法find用于Android的编译器,我不知道为什么? 我错过了什么? 我在“安装”NDK时忘记了什么吗?
谢谢。
你得到的错误是由于缺少工具链调用引起的,相反,无法找到arm-linux-androideabi-g++
命令/ executable / binary。
幸运的是,我们可以通过安装独立工具链来解决这个问题 – 一个实际上有你缺少的东西,一个通用的arm-linux-androideabi
交叉编译器,而不是其他的,一个更晦涩的供应商/平台 -特定的armv7a-marvell-linux-android
/工具链,比如armv7a-marvell-linux-android
,或者是CLang使用的arm-linux-android
。 有关CLANG的更多信息, 请看这里 。 我可能是错误的,而且CLang实际上产生了一个arm-linux-androideabi
工具链,但是我不确定。 我知道你可以很容易地使用它,我只是不确定是否可以使用“开箱即用”,这是你正在寻找的东西。 “其余的工作”只是几条路径出口 – 但依然如此。 我们正在瞄准这里最懒的解决方案。
独立的工具链对于您的任务来说应该足够了,所以请尽可能地使用它来交叉编译解决方案。
但是,如果您感觉冒险 – 您可以使用crosstool-ng
工具自由制作自己的交叉编译器(或整个工具链!)。 但是,尽量坚持Linaro libc分支; 个人经验告诉我,某种程度上工作得最好,造成浪费最少的问题/时间。
编辑:
此外,请确保您下载适合您的体系结构(操作系统)和操作系统的正确的一个,32位和64位也很重要。 经过漫长的讨论,我们意识到这是一个“32位与64位”的问题。 这里有一个链接来阅读更多关于它。