【问题标题】:Android NDK in Eclipse :: (Cannot run program "ndk-build": Unknown reason)Eclipse中的Android NDK ::(无法运行程序“ndk-build”:未知原因)
【发布时间】:2012-03-26 02:19:11
【问题描述】:

我在尝试使用 CDT 插件从 Eclipse 构建我的 NDK 项目时失去理智,但我收到错误消息:-

NDK (Cannot run program "ndk-build": Unknown reason)

应用程序运行但我失去了构建过程的所有控制台输出,这是尝试编译时的噩梦,我必须在命令行上进行。

这就是我到达那里的方式:-

I Downloaded and installed the CDT plugin for Eclipse.

然后:

Added my JNI folder and also your Android.mk in the JNI directory.

然后:

Go FILE / NEW / OTHER /C/C++ / ( Convert to a C/C++ Project )

关于设置我的构建目标:

Check the project, choose MakeFile Project and Other Toolchain click NEXT

最后在项目属性中:

PROJECT / PROPERTIES / C/C++ uncheck " use default build command" replace "make" with "ndk-build" 

然后,当它构建时,它会将错误吐出到控制台。虽然它编译并生成在设备上运行的构建,但我看不到任何构建输出。

我的 .bash_profile 中有“ndk-build”,其中包含以下变量:

:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools:$ANDROID_NDK

我可以从命令行使用 ndk-build 进行编译。 Eclipse 似乎看不到我的 PATH:

这是在 Mac OSX 上的 Helios 版本 2 中。

编辑:好的,因此编译得很好,并且构建的输出实际上隐藏在此消息下方,这远非理想,因为当我需要查看已构建的项目时,我无法将其掩盖。我该如何摆脱它?

【问题讨论】:

标签: android eclipse android-ndk eclipse-cdt


【解决方案1】:

在我的例子中,我必须在 eclipse 中给出我的 ndk-build 命令的完整路径才能构建它:

Eclipse -> Your Prj -> Right Click -> C/C++ Build -> “Builder” 组:“Build command”的值应该是完整的路径,如下所示(而不仅仅是“ndk-build”)

/Users/vshakya/MySoftware/android-ndk-r8/ndk-build

我希望这对将来的其他人有所帮助,因为我只是浪费了大约 30 分钟来解决这个问题。

【讨论】:

  • 这是我能够开始工作的唯一解决方案。我不知道如何更改默认的 Builder 设置。 Eclipse 始终将构建命令默认为 ${NDKROOT}/ndk-build.cmd Major P.I.T.A!
【解决方案2】:

这可能看起来很愚蠢,但您是否检查过是否有多个控制台?我可以想象有一个用于您引用的消息,另一个用于构建输出。

另见this:答案有一个有趣的链接,处理设置但也与eclipse集成有关。

【讨论】:

  • 当你说几个控制台...你的意思是Eclipse的输出窗格中的几个选项卡?还是多个执行线程可以访问相同的日志输出?你能扩大一点吗?如果我可以抑制错误,它是一种解决方法,但老实说,在这个阶段它可以工作,只有我需要清理的每个构建才能看到下面的输出。但我很想知道为什么 ndk 编译器会导致这个最奇妙的;y 明确的错误:P
  • 好吧,在玩了这么久之后,我发现答案是单击小监视器(以显示 Selected console )图标,这似乎显示了错误,因此某处的输出被 ndk 覆盖-buikd。
【解决方案3】:

我遇到了同样的问题,虽然http://developer.android.com/tools/sdk/ndk/index.html#Installing关于安装NDK的描述很好,但它并没有涵盖这个常见问题的解决方案。

Eclipse 似乎允许您在多个位置进行配置,您可以通过 Window 菜单进行全局修改或通过 Properties 选项进行项目特定配置。最简单的是在 {Properties; C/C++ Build} 构建命令框。

【讨论】:

    【解决方案4】:

    更简单的解决方案,使用 Eclipse 项目路径中的命令 ndk-build 构建:

    $PROJECT>ndk-build
    

    每次更改本机代码时。

    要在 Eclipse 上编译,我按照以下步骤操作:

    • 创建 Eclipse 项目。
    • 在 jni 文件夹中添加本机代码 (.cpp)
    • 按照典型结构创建 Android.mk 和 Application.mk
    LOCAL_PATH:= $(调用我的目录) 包括 $(CLEAR_VARS) LOCAL_SRC_FILES := $$添加源文件$$ LOCAL_LDLIBS := -lpcap LOCAL_MODULE := libtest LOCAL_C_INCLUDES := $$所用头文件的路径$$ 包括 $(BUILD_SHARED_LIBRARY) ---------------- Aplication.mk 取决于您想要的选项类型
    • 当eclipse抛出警告时,将鼠标放在jni代码部分,勾选“convert project to native code”选项,会自动转换项目。

    下次编译时会调用ndk-build V=1,编译原生代码,然后编译Android部分。

    注意:

    您必须能够在系统上的所有文件夹中使用 ndk-build。该命令检测被调用的位置,并查找 jni 文件夹,以使用 Android.mk 编译所有原生代码。

    寻找的基本结构是:

    • $PROJECT>jni/
      • /Android.mk
      • /Application.mk
      • /code.cpp

    但你可以修改 Android.mk 以在其他路径中查找代码。

    希望对你有帮助!

    【讨论】:

    • 但是 NDK-BUILD 不在项目路径中,它在 NDK 的路径中。还是我在这里遗漏了什么?
    • 您必须能够在系统上的所有文件夹中使用 ndk-build。该命令检测被调用的位置,并查找 jni 文件夹,以使用 Android.mk 编译所有原生代码。
    • 哦,我明白了,我可以从所有文件夹调用 ndk-build。我的路径上有 NDK,它通过从终端调用 ndk-build 编译得很好,而且它在 eclipse 中编译得很好我只是得到这个错误,它掩盖了编译时发现的错误。
    • 如果您需要查看正在编译的内容、行、路径等,请使用命令:$(warning Compiling Android.mk from $(MYVAR)),此命令会使用变量和文字
    • 这是在我的 Application.mk 还是我的 Android.mk 中,它具有什么优先级?
    【解决方案5】:

    红杉是你的朋友。自 Indigo 发布以来,它就是 Eclipse 的一部分。

    http://www.eclipse.org/sequoyah/

    【讨论】:

    • 我读到了关于红杉的文章,但这是一项单独的技术,我 99.9% 的人都在那里减去了这个问题,我只想找出为什么会发生这种情况,
    【解决方案6】:

    在我的例子中,我必须在 eclipse 中给出我的 ndk-build.cmd 命令的完整路径才能构建它:

    Eclipse -> 你的项目 -> 右键 -> C/C++ Build

    C:\Prateek\android-ndk-r9\ndk-build.cmd

    【讨论】:

    • 我的情况也是如此。 PATH 的任何改变都无济于事。
    • 这会触发一个可能与斜杠和反斜杠有关的错误:“C:\android-ndk-r10d\build/core/build-local.mk:148: *** Android NDK:正在中止。停止。”不工作。
    【解决方案7】:

    以防万一您只看到您的标准输出而不是标准错误,请尝试将您的标准错误重定向到标准输出。

    ndk-build 2>&1

    【讨论】:

      【解决方案8】:

      确保在 Windows 中使用“absolutepath\ndk-build.cmd”而不是“absolutepath\ndk-build”。 添加 .cmd 后编译不会出错

      【讨论】:

        【解决方案9】:

        除了系统环境。

        在Eclipse中,你还需要进入preferences->c/c++ Build -> environment。添加一个名为“NDKROOT”的新变量,并将值设置为 NDK 安装路径。

        这对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-14
          • 2018-05-05
          • 2016-01-21
          • 1970-01-01
          • 1970-01-01
          • 2012-05-16
          • 1970-01-01
          相关资源
          最近更新 更多