[英]Why are include paths unseen when #include in Android NDK code?
我想向我的Android NDK項目添加一個包含路徑,但是編譯器找不到包含的文件。 我再次檢查了包含的文件在我的系統上是否存在。 我在這里做錯了什么?
Android.mk:
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_CFLAGS := -Wno-write-strings
LOCAL_C_INCLUDES +:= $(LOCAL_PATH)
LOCAL_CFLAGS +:= -O3
LOCAL_CPPFLAGS +:=$(LOCAL_CFLAGS)
LOCAL_CFLAGS := -I/absolute/path/to/my/include //--->here the include path is set
LOCAL_SRC_FILES := hello-jni.cpp
LOCAL_LDLIBS := -ldl -llog -lc
include $(BUILD_SHARED_LIBRARY)
jni / hello-jni.cpp中包含的標頭:
extern "C" {
#include <codecs/codecs.h>
#include <test/test.h>
#include <mymath/mymath.h>
}
....
錯誤日志:
jni/hello-jni.cpp:9:34: fatal error: codecs/codecs.h: No such file or directory
compilation terminated.
make: *** [obj/local/armeabi/objs/hello-jni/hello-jni.o] Error 1
嘗試在LOCAL_C_INCLUDES中添加標題
我認為問題是此行:
LOCAL_CPPFLAGS +:=$(LOCAL_CFLAGS)
在這里使用+:=
意味着所使用的LOCAL_CFLAGS的值是在聲明LOCAL_CPPFLAGS時的值。 此時,尚未設置LOCAL_CFLAGS(在下一行設置)。 嘗試將其更改為:
LOCAL_CPPFLAGS +=$(LOCAL_CFLAGS)
它將在每次使用時評估LOCAL_CPPFLAGS,並將獲得正確的值。 或者,在LOCAL_CPPFLAGS中使用LOCAL_CFLAGS之前先聲明它。
您的Android.mk不遵循基本規則。 讓我們嘗試重寫:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_CFLAGS := -Wno-write-strings
ifneq ($(NDK_DEBUG),1)
LOCAL_CFLAGS += -O3
endif
LOCAL_C_INCLUDES := /absolute/path/to/my/include
LOCAL_SRC_FILES := hello-jni.cpp
LOCAL_LDLIBS := -ldl -llog -lc
include $(BUILD_SHARED_LIBRARY)
假設您擁有/absolute/path/to/my/include/codecs/codecs.h
等文件或<project>/jni/codecs/codecs.h
等文件。 如果您的項目還具有jni/test/test.h
和jni/mymath/mymath.h
,則可能根本不需要定義LOCAL_C_INCLUDES
。 jni
目錄將自動使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.