5

我正在尝试使用 Mountain Lion 上的 Android NDK 为 Android 构建一个库,遵循本指南

http://masl.cis.gvsu.edu/2012/01/25/android-echoprint/

当需要编译库时,我运行:

cd <path to jni>
<ndk>/ndk-build

我收到以下错误:

Compile++ thumb  : echoprint-jni <= AndroidCodegen.cpp
arm-linux-androideabi-g++: error trying to exec 'cc1plus': execvp: No such file or directory
make: *** [/Users/wingdom/Desktop/obj/local/armeabi/objs/echoprint-jni/AndroidCodegen.o] Error 1

我相信我已将所需的所有内容添加到路径变量中:

export PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:Developer/android-sdk/tools:/Developer/android-sdk/platform-tools:/Developer/android-ndk:/Developer/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin

为了编译它,我还需要做什么?我目前正在使用 r8b NDK,但已经尝试使用版本一直到 6。

编辑:

我尝试了这个解决方案:构建 android ndk 示例项目时出错

添加

export PATH=$PATH:/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2

到我的路径给我这个错误:

cc1plus: error: unrecognized command line option "-mbionic"
cc1plus: error: unrecognized command line option "-mthumb"
cc1plus: error: unrecognized command line option "-mfpu=vfp"
/Users/wingdom/Desktop/jni/AndroidCodegen.cpp:1: error: bad value (armv5te) for -march= switch
/Users/wingdom/Desktop/jni/AndroidCodegen.cpp:1: error: bad value (xscale) for -mtune= switch
make: *** [/Users/wingdom/Desktop/obj/local/armeabi/objs/echoprint-jni/AndroidCodegen.o] Error 1

但添加

export CROSS_COMPILER=$PATH:/Developer/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin

没有帮助,就像在上面的链接中所做的那样。

4

4 回答 4

6

我遇到了同样的错误。
我什至无法执行“gcc,g++”命令。所以我在谷歌上搜索了很多以找到解决方案,但对我没有任何帮助。

然后,我发现 ndk 中的某些文件名不正确,_在某些文件名上有拖尾。(在我的情况下,在 toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/arm-linux-androideabi/bin 文件夹中, gcc_, g++_,c++_而不是gcc, g++, c++.)
我使用 The unarchiver 来提取 NDK 存档,所以我认为 unarchiving 过程有问题。

所以我重新下载了 NDK 并检查了 MD5 校验和,然后使用 Mac 的默认存档实用程序提取了存档。

现在,问题已经解决了。

于 2012-09-18T01:36:13.627 回答
0

听起来您的 NDK 下载/解包很糟糕。它正在寻找的cc1plus二进制文件应该在$NDK_HOME/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/libexec/gcc/arm-linux-androideabi/4.4.3/. 如果它不存在,请尝试重新下载 SDK 和/或再次解包。

如果存在,请确保构建传递V=1ndk-build,并查看是否有任何奇怪-B的选项传递给编译器。该-B选项告诉gcc在哪里可以找到它的“子程序”(其中cc1plus一个)。很确定 r8 的命令行上不应该有任何东西,所以如果有的话,某处的某处传递了错误的标志。例如,在我的系统上,C++ NDK 命令行最终看起来像这样:

 /opt/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi-v7a/objs/sometarget/SomeCppFile.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fno-exceptions -fno-rtti -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I/opt/android-ndk/sources/cxx-stl/stlport/stlport -I/opt/android-ndk/sources/cxx-stl//gabi++/include -DANDROID -Wall -Wa,--noexecstack  -frtti  -O2 -DNDEBUG -g   -I/opt/android-ndk/platforms/android-8/arch-arm/usr/include -c  jni/SomeCppFile.cpp -o ./obj/local/armeabi-v7a/objs/sometarget/SomeCppFile.o
于 2012-09-17T21:39:16.270 回答
0

也许你需要安装 g++:

$sudo apt-get install g++

于 2013-12-04T06:02:32.297 回答
0

我花了大约一天的时间来找到这个的根本原因

arm-linux-androideabi-gcc: error trying to exec 'cc1': execvp: No such file... 

和其他问题。

问题是我用 7z 解压了 NDK 和 SDK,这删除了所有二进制文件的可执行权限,并且 Eclipse 无法启动 cc1。一旦我使用 tar 解压了 SDK 和 NDK 的 tar 文件,一切都开始运行良好。

于 2014-07-29T09:46:04.563 回答