[英].h: No such file or directory NDK Android
嗨Ivgot設置了gnu make副駕駛Cros GCC,而javah由cygwin創建。 hedaer文件。 我在同一jni目錄中有.h和.cpp:我不明白此錯誤:
make all
Building file: ../jni/com_jp_algi_CoreC.cpp
Invoking: Cross G++ Compiler
g++ -I"C:\android-ndk-r5c\platforms\android-9\arch-arm\usr\include" -O0 -g3 - Wall -c -fmessage-length=0 -MMD -MP -MF"jni/com_jp_algi_CoreC.d" - MT"jni/com_jp_algi_CoreC.d" -o "jni/com_jp_algi_CoreC.o" "../jni/com_jp_algi_CoreC.cpp"
../jni/com_jp_algi_CoreC.cpp:2:31: fatal error: com_jp_algi_CoreC.h: No such file or directory
jni/subdir.mk:18: recipe for target `jni/com_jp_algi_CoreC.o' failed
compilation terminated.
make: *** [jni/com_jp_algi_CoreC.o] Error 1
Android buldier可以工作,但是...錯誤是沒有實現的。 並且我必須使用我的外部make,當我在cygwin中由javah創建.h時...也許我將這個java項目轉換為C ++添加性質..也許會有問題嗎?
Ivgot這個.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := com_jp_algi_CoreC
LOCAL_SRC_FILES := com_jp_algi_CoreC.cpp
include $(BUILD_SHARED_LIBRARY)
.cpp:
#include <com_jp_algi_CoreC.h>
/* Header for class com_jp_algi_CoreC */
extern "C" {
JNIEXPORT void JNICALL Java_com_jp_algi_CoreC_vector
(JNIEnv *env, jobject clazz, jfloatArray input){
jfloat* flt1=NULL ;
jsize size = env->GetArrayLength(input);
jint i;
// check if array size >0 and wedont cause exception
// allocate buffer for array and get data from Java array
flt1 = new jfloat[size];
env->GetFloatArrayRegion(input,0,size,flt1);
// exception check. Always use exception check
// do stuff to the array
for (i = 0 ; i < size; i++){
flt1[i] = 1;
}
// vector(flt1);
// set result to Java array and delete buffer. And exception check of course
env->SetFloatArrayRegion(input,0,size,flt1);
delete[] flt1;
// All is ok
}
JNIEXPORT void JNICALL Java_com_jp_algi_CoreC_vector2
(JNIEnv *, jobject, jfloatArray, jobjectArray);
}
.h:/ *請勿編輯此文件-它是機器生成的/ #include / com_jp_algi_CoreC類的標題* /
#ifndef _Included_com_jp_algi_CoreC
#define _Included_com_jp_algi_CoreC
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_jp_algi_CoreC
* Method: vector
* Signature: ([F)V
*/
JNIEXPORT void JNICALL Java_com_jp_algi_CoreC_vector
(JNIEnv *, jobject, jfloatArray);
/*
* Class: com_jp_algi_CoreC
* Method: vector2
* Signature: ([F[[F)V
*/
JNIEXPORT void JNICALL Java_com_jp_algi_CoreC_vector2
(JNIEnv *, jobject, jfloatArray, jobjectArray);
#ifdef __cplusplus
}
#endif
#endif
和這個CoreC類:
package com.jp.algi;
public class CoreC {
static {
System.loadLibrary("com_jp_algi_CoreC");
}
public native void vector(float[] input);
public native void vector2(float[] input, float[][] input2);
}
您確定“ com_jp_algi_CoreC.cpp”文件中包含“ com_jp_algi_CoreC.h”文件嗎?
您的Android.mk文件看起來像這樣嗎?
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := module_name
LOCAL_SRC_FILES := com_jp_algi_CoreC.cpp
include $(BUILD_SHARED_LIBRARY)
您在Android項目中的目錄結構是這樣的嗎?
jni/
├── Android.mk
├── com_jp_algi_CoreC.h
├── com_jp_algi_CoreC.cpp
另外,嘗試從項目的根目錄而不是Eclipse運行ndk-build ,看看是否有任何區別。
編輯:使用您的代碼,我創建了一個測試Android應用程序,並使用ndk-build編譯了本機代碼,並且一切正常。
您的NDK很舊。 新版本中有許多改進和錯誤修復。 今天的最新版本是r8d,它可以在沒有cygwin的Windows上運行。
關於您的代碼,您根本不需要該#include
語句,如果僅刪除.cpp文件的第一行,它將正確編譯並鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.