【问题标题】:How to use android-ndk?如何使用android-ndk?
【发布时间】:2015-09-01 11:13:34
【问题描述】:

我使用取自 here 的 PTAM 代码。我尝试使用此代码制作一个 android 应用程序。

PTAM 代码使用 libcvd、TooN、gvars3 库。我使用 ndk-build 从我的 c++ 测试文件生成一个 .so 文件。

首先,我尝试在安卓手机上运行以下代码:

#include <string.h>
#include <jni.h>

extern "C" {

    int returnInt()
    {

        int returnVal = 4;
        return returnVal;
    }
}

它可以生成.so文件而没有任何错误。如果我添加 #include &lt; TooN/TooN.h &gt; ,`ndk-build 会这样说

fatal error: TooN/TooN.h: No such file or directory
 #include <TooN/TooN.h>
                       ^
compilation terminated.

Android.mk 是:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := test-jni
LOCAL_SRC_FILES := test-jni.cpp

include $(BUILD_SHARED_LIBRARY)

我该如何解决这个错误信息?

【问题讨论】:

  • 您需要将Toon的父目录添加到您的包含路径中。在您的 Android.mk 中,添加行 LOCAL_C_INCLUDES += the/path/to/Toon's/parent/directory
  • 我将 LOCAL_C_INCLUDES := /usr/include/TooN 添加到 android.mk 文件中。但错误依然存在。
  • 你不应该添加 TooN 目录本身,而是它的 parent 目录(因为你也在 #include &lt;&gt; 中指定了目录)。
  • 你是对的。 LOCAL_C_INCLUDES := /usr/include 就够了。但是Toon.h 包含#include &lt;iostream&gt;。我收到致命错误:iostream:没有这样的文件或目录。在 usr/include 或 usr/local/include 下没有名为 iostream 的文件夹。
  • 在您的 Application.mk 中添加 APP_STL := gnustl_shared(或您想要使用的任何 STL 实现)

标签: android c++ compiler-errors android-ndk


【解决方案1】:

致命错误:TooN/TooN.h:没有这样的文件或目录 #include

当您将&lt;&gt;#include 一起使用时,编译器将在您的包含路径(以及可能的其他预定义目录)中搜索该文件。

要在Android.mk 中构建模块时将目录添加到包含路径,您可以将其添加到LOCAL__INCLUDES。例如,如果TooN.h 的完整路径是/home/foobar/TooN/TooN.h,您应该这样做:

LOCAL_C_INCLUDES += /home/foobar

我收到致命错误:iostream:没有这样的文件或目录。在 usr/include 或 usr/local/include 下没有名为 iostream 的文件夹。

iostream 类是 STL 的一部分,因此您需要指定一个 STL 实现来构建。这可以使用Application.mk 中的APP_STL 变量来完成。例如:

APP_STL := gnustl_shared

有关 NDK 可用的 STL 实现列表,请参阅 this page

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 2013-10-15
    • 1970-01-01
    • 2011-01-14
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2013-12-10
    相关资源
    最近更新 更多