簡體   English   中英

在Android NDK代碼中#include時,為什么看不到包含路徑?

[英]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.hjni/mymath/mymath.h ,則可能根本不需要定義LOCAL_C_INCLUDES jni目錄將自動使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM