[英]Android ndk-build iostream: No such file or directory
I'm having problem with compiling cpp file using ndk-build tool (windows 7 with cygwin) Error appears when I try to compile cpp file with #include: 我使用ndk-build工具(带有cygwin的Windows 7)编译cpp文件时遇到问题,当我尝试使用#include编译cpp文件时出现错误:
jni/native.cpp:5:20: error: iostream: No such file or directory
Here is my cpp file: 这是我的cpp文件:
#include <jni.h>
#include <string.h>
#include <stdio.h>
#include <android/log.h>
#include <iostream>
#define DEBUG_TAG "NDK_SampleActivity"
#define LOG_TAG "hellojni"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#ifdef __cplusplus
extern "C" {
#endif
void Java_com_test_ndk_SampleActivity_helloLog(JNIEnv* env, jobject thisobj, jstring logThis)
{
jboolean isCopy;
const char * szLogThis = env->GetStringUTFChars(logThis, &isCopy);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", szLogThis);
env->ReleaseStringUTFChars(logThis, szLogThis);
}
#ifdef __cplusplus
}
#endif
And here is my Android.mk file: 这是我的Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
APP_STL:=stlport_static
LOCAL_LDLIBS := -llog
LOCAL_MODULE := swingbyte-android
LOCAL_SRC_FILES := native.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all
include $(BUILD_SHARED_LIBRARY)
I have iostream file in android ndk folder (NDK_ROOT\\sources\\cxx-stl\\gnu-libstdc++\\include) but I don't have any idea how to tell compiler to look for iotream (and other standart header files) in that folder. 我在android ndk文件夹(NDK_ROOT \\ sources \\ cxx-stl \\ gnu-libstdc ++ \\ include)中有iostream文件,但我不知道如何告诉编译器在该文件夹中寻找iotream(以及其他标准的头文件)。
It seems to that I'm missing one or few environment variables, or some comiler flags. 看来我缺少一个或几个环境变量或一些编译器标志。
I think "APP_STL:=stlport_static" must be in Application.mk file. 我认为“ APP_STL:= stlport_static”必须在Application.mk文件中。
Create a "Application.mk" file and write "APP_STL:=stlport_static" in it. 创建一个“ Application.mk”文件,并在其中写入“ APP_STL:= stlport_static”。
This works for me. 这对我有用。
LOCAL_STATIC_LIBRARIES += libstlport
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_C_INCLUDES += bionic
Adding 新增中
APP_PLATFORM := android-23
Or whatever revision you use solved it for me. 或您使用的任何修订版本对我来说都是解决之道。
Update your android ndk to the latest one . 将您的android ndk更新到最新版本。 I faced error in android ndk ver 5
我在android ndk ver 5中遇到错误
Just spent days to update my NDK from r10e to r20, there're several variables are changed. 刚花了几天时间将我的NDK从r10e更新到r20,其中有几个变量已更改。
For NDK r10e 对于NDK r10e
Android.mk: Android.mk:
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := ./main.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/
LOCAL_CPP_EXTENSION := .cxx .cpp .cc
LOCAL_CPPFLAGS := -fexceptions -frtti
LOCAL_CPPFLAGS += -std=c++11 -D__cplusplus=201103L
include $(BUILD_EXECUTABLE)
Application.mk: Application.mk:
APP_ABI := all
APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION := 4.9
APP_OPTIM := debug
For NDK r20 对于NDK r20
Android.mk: Android.mk:
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := ./main.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/
LOCAL_CPP_EXTENSION := .cxx .cpp .cc
LOCAL_CPPFLAGS := -fexceptions -frtti
LOCAL_CPPFLAGS += -std=c++11 -D__cplusplus=201103L -DANDROID_STL=c++_shared
include $(BUILD_EXECUTABLE)
Application.mk: Application.mk:
APP_ABI := all
#In general, you can only use a static variant of the C++ runtime if you have one and only one shared library in your application.
APP_STL := c++_static
NDK_TOOLCHAIN_VERSION := clang
APP_PLATFORM := android-23
APP_OPTIM := debug
and my main.cpp (including my bin_node.h): 和我的main.cpp(包括我的bin_node.h):
int main(int argc,char **argv) {
printf("****************** tree node ******************\n");
amo::BinNode<int> root(0);
amo::BinNode<int>* lchild1 = root.insertLeftChild(1);
amo::BinNode<int>* rchild2 = root.insertRightChild(2);
amo::BinNode<int>* lchild3 = lchild1->insertLeftChild(3);
amo::BinNode<int>* rchild4 = lchild1->insertRightChild(4);
amo::BinNode<int>* lchild5 = rchild2->insertLeftChild(5);
amo::BinNode<int>* rchild6 = rchild2->insertRightChild(6);
amo::BinNode<int>* lchild7 = lchild3->insertLeftChild(7);
amo::BinNode<int>* rchild8 = lchild3->insertRightChild(8);
amo::BinNode<int>* lchild9 = rchild6->insertLeftChild(9);
amo::BinNode<int>* rchild10 = rchild6->insertRightChild(10);
amo::BinNode<int>* lchild11 = rchild8->insertLeftChild(11);
amo::BinNode<int>* rchild12 = rchild8->insertRightChild(12);
printf("going to root.traversePre()\n");
root.traversePre();
printf("going to root.traversePreLoop()\n");
root.traversePreLoop();
printf("going to root.traversePreLoop2()\n");
root.traversePreLoop2();
printf("\n****************** main return ******************\n");
return 0;}
Run ndk-build and build an executable file 运行ndk-build并生成一个可执行文件
For more source code and information for this, check my GitHub 有关更多源代码和信息,请查看我的GitHub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.