如何使用android-ndk?

时间:2015-09-01 11:13:34

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

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

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

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

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

extern "C" {

    int returnInt()
    {

        int returnVal = 4;
        return returnVal;
    }
}

它可以生成.so文件而不会出现任何错误。如果我添加#include < TooN/TooN.h >,`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)

如何解决此错误消息?

1 个答案:

答案 0 :(得分:0)

  

致命错误:TooN / TooN.h:没有这样的文件或目录    #include&lt; TooN / TooN.h&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实现。这可以使用APP_STL中的Application.mk变量来完成。例如:

APP_STL := gnustl_shared

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