Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK-没有终止此类文件或目录编译-头文件导出问题_Android_C++_Android Ndk_Header Files_Android.mk - Fatal编程技术网

Android NDK-没有终止此类文件或目录编译-头文件导出问题

Android NDK-没有终止此类文件或目录编译-头文件导出问题,android,c++,android-ndk,header-files,android.mk,Android,C++,Android Ndk,Header Files,Android.mk,我尝试使用NDK ./P>导入TAGLIB C++库()到Android。 通过将所有源代码放在/jni/taglibroot/下,我成功地编译了库,如下图所示: 并在/jni文件夹上运行ndk build 但是,我还创建了下面的tag_lib_personal.cpp文件(使用TagLib API): 错误显示它无法从TagLib库中找到一些.h文件。这是我的Android.mk文件: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) L

我尝试使用NDK ./P>导入TAGLIB C++库()到Android。 通过将所有源代码放在
/jni/taglibroot/
下,我成功地编译了库,如下图所示:

并在
/jni
文件夹上运行
ndk build

但是,我还创建了下面的
tag_lib_personal.cpp
文件(使用TagLib API):

错误显示它无法从TagLib库中找到一些.h文件。这是我的
Android.mk
文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := taglib_module
FILE_LIST := $(wildcard $(LOCAL_PATH)/taglibroot/*.cpp) #Based on: http://stackoverflow.com/a/8980441
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)


LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog

LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)
# If I run ndk-build only on the above code, it compiles the TagLib library successfully and generates the .so files as expected


include $(CLEAR_VARS)
LOCAL_MODULE := my_own_source_files
LOCAL_SHARED_LIBRARIES := taglib_module
LOCAL_SRC_FILES := tag_lib_personal.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/taglibroot/taglib,\
                    $(LOCAL_PATH)/taglibroot/taglib/ape,\
                    $(LOCAL_PATH)/taglibroot/taglib/asf,\
                    $(LOCAL_PATH)/taglibroot/taglib/flac,\
                    $(LOCAL_PATH)/taglibroot/taglib/it,\
                    $(LOCAL_PATH)/taglibroot/taglib/mod,\
                    $(LOCAL_PATH)/taglibroot/taglib/mp4,\
                    $(LOCAL_PATH)/taglibroot/taglib/mpc,\
                    $(LOCAL_PATH)/taglibroot/taglib/mpeg,\
                    $(LOCAL_PATH)/taglibroot/taglib/mpeg/id3v1,\
                    $(LOCAL_PATH)/taglibroot/taglib/mpeg/id3v2,\
                    $(LOCAL_PATH)/taglibroot/taglib/mpeg/id3v2/frames,\
                    $(LOCAL_PATH)/taglibroot/taglib/ogg,\
                    $(LOCAL_PATH)/taglibroot/taglib/ogg/flac,\
                    $(LOCAL_PATH)/taglibroot/taglib/ogg/opus,\
                    $(LOCAL_PATH)/taglibroot/taglib/ogg/speex,\
                    $(LOCAL_PATH)/taglibroot/taglib/ogg/vorbis,\
                    $(LOCAL_PATH)/taglibroot/taglib/riff,\
                    $(LOCAL_PATH)/taglibroot/taglib/riff/aiff,\
                    $(LOCAL_PATH)/taglibroot/taglib/riff/wav,\
                    $(LOCAL_PATH)/taglibroot/taglib/s3m,\
                    $(LOCAL_PATH)/taglibroot/taglib/toolkit,\
                    $(LOCAL_PATH)/taglibroot/taglib/trueaudio,\
                    $(LOCAL_PATH)/taglibroot/taglib/wavpack,\
                    $(LOCAL_PATH)/taglibroot/taglib/xm

LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)

正如您所看到的,我将至少有一个.h文件的TagLib库的每个目录都放在
LOCAL\u EXPORT\u C\u INCLUDES
指令中,但由于某些原因,它仍然找不到
tfile.h
(位于
$(LOCAL\u PATH)/taglibroot/TagLib/toolkit
中)。我错过了什么?

你没有错过,你有一个额外的;-)

LOCAL\u C\u INCLUDES的语法不应使用这些逗号。您只需列出所有目录。实际上,您可以使用
LOCAL\u EXPORT\u C\u INCLUDES
(您可能尝试过的帖子提示):

注意如果您将来在
ndk build
中遇到奇怪的问题,第一个建议是运行
ndk build V=1
:它将记录
ndk build
使用的所有实际编译命令,这可能经常暴露各种
Android.mk
文件中的错误或打字错误

PS您的构建最终将失败。构建taglib时,还需要编译
taglibroot
子目录中的所有.cpp文件!我建议您尝试使用CMake按照设计的方式构建库。可以在以下位置找到Android修补程序:

您也可以尝试一种简单的方法,但我不确定它是否有效:

MY_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := taglib_module
LOCAL_PATH := $(MY_PATH)/taglibroot/taglib
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\
        $(LOCAL_PATH)/ape\
        $(LOCAL_PATH)/asf\
        $(LOCAL_PATH)/flac\
        $(LOCAL_PATH)/it\
        $(LOCAL_PATH)/mod\
        $(LOCAL_PATH)/mp4\
        $(LOCAL_PATH)/mpc\
        $(LOCAL_PATH)/mpeg\
        $(LOCAL_PATH)/mpeg/id3v1\
        $(LOCAL_PATH)/mpeg/id3v2\
        $(LOCAL_PATH)/mpeg/id3v2/frames\
        $(LOCAL_PATH)/ogg\
        $(LOCAL_PATH)/ogg/flac\
        $(LOCAL_PATH)/ogg/opus\
        $(LOCAL_PATH)/ogg/speex\
        $(LOCAL_PATH)/ogg/vorbis\
        $(LOCAL_PATH)/riff\
        $(LOCAL_PATH)/riff/aiff\
        $(LOCAL_PATH)/riff/wav\
        $(LOCAL_PATH)/s3m\
        $(LOCAL_PATH)/toolkit\
        $(LOCAL_PATH)/trueaudio\
        $(LOCAL_PATH)/wavpack\
        $(LOCAL_PATH)/xm

FILE_LIST := $(foreach dir, $(LOCAL_EXPORT_C_INCLUDES), $(wildcard $(dir)/*.cpp))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog

LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_PATH := $(MY_PATH)
LOCAL_MODULE := my_own_shared_lib
LOCAL_SHARED_LIBRARIES := taglib_module
LOCAL_SRC_FILES := tag_lib_personal.cpp

LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)
请注意,在Java中,您将加载两个库,顺序很重要:

Runtime.loadLibrary("taglib_module");
Runtime.loadLibrary("my_own_shared_lib");

非常感谢你的回复,亚历克斯。我试过你直截了当的方法,但没有成功。我想我必须研究你发送的cmake Android链接。我会这样做,稍后再试。如果你还有什么想法,请告诉我!:)@蒂亚戈:嗨,蒂亚戈,请让我知道这个解决方案是否有效,因为我也遇到了同样的问题?谢谢,这对我来说不起作用。我放弃了将taglib添加到Android项目中的尝试,转而使用另一个库。
LOCAL_C_INCLUDES := $(LOCAL_PATH)/taglibroot/taglib\
                $(LOCAL_PATH)/taglibroot/taglib/ape\
                $(LOCAL_PATH)/taglibroot/taglib/asf\
                $(LOCAL_PATH)/taglibroot/taglib/flac\
                $(LOCAL_PATH)/taglibroot/taglib/it\
                $(LOCAL_PATH)/taglibroot/taglib/mod\
                $(LOCAL_PATH)/taglibroot/taglib/mp4\
                $(LOCAL_PATH)/taglibroot/taglib/mpc\
                $(LOCAL_PATH)/taglibroot/taglib/mpeg\
                $(LOCAL_PATH)/taglibroot/taglib/mpeg/id3v1\
                $(LOCAL_PATH)/taglibroot/taglib/mpeg/id3v2\
                $(LOCAL_PATH)/taglibroot/taglib/mpeg/id3v2/frames\
                $(LOCAL_PATH)/taglibroot/taglib/ogg\
                $(LOCAL_PATH)/taglibroot/taglib/ogg/flac\
                $(LOCAL_PATH)/taglibroot/taglib/ogg/opus\
                $(LOCAL_PATH)/taglibroot/taglib/ogg/speex\
                $(LOCAL_PATH)/taglibroot/taglib/ogg/vorbis\
                $(LOCAL_PATH)/taglibroot/taglib/riff\
                $(LOCAL_PATH)/taglibroot/taglib/riff/aiff\
                $(LOCAL_PATH)/taglibroot/taglib/riff/wav\
                $(LOCAL_PATH)/taglibroot/taglib/s3m\
                $(LOCAL_PATH)/taglibroot/taglib/toolkit\
                $(LOCAL_PATH)/taglibroot/taglib/trueaudio\
                $(LOCAL_PATH)/taglibroot/taglib/wavpack\
                $(LOCAL_PATH)/taglibroot/taglib/xm
MY_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := taglib_module
LOCAL_PATH := $(MY_PATH)/taglibroot/taglib
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\
        $(LOCAL_PATH)/ape\
        $(LOCAL_PATH)/asf\
        $(LOCAL_PATH)/flac\
        $(LOCAL_PATH)/it\
        $(LOCAL_PATH)/mod\
        $(LOCAL_PATH)/mp4\
        $(LOCAL_PATH)/mpc\
        $(LOCAL_PATH)/mpeg\
        $(LOCAL_PATH)/mpeg/id3v1\
        $(LOCAL_PATH)/mpeg/id3v2\
        $(LOCAL_PATH)/mpeg/id3v2/frames\
        $(LOCAL_PATH)/ogg\
        $(LOCAL_PATH)/ogg/flac\
        $(LOCAL_PATH)/ogg/opus\
        $(LOCAL_PATH)/ogg/speex\
        $(LOCAL_PATH)/ogg/vorbis\
        $(LOCAL_PATH)/riff\
        $(LOCAL_PATH)/riff/aiff\
        $(LOCAL_PATH)/riff/wav\
        $(LOCAL_PATH)/s3m\
        $(LOCAL_PATH)/toolkit\
        $(LOCAL_PATH)/trueaudio\
        $(LOCAL_PATH)/wavpack\
        $(LOCAL_PATH)/xm

FILE_LIST := $(foreach dir, $(LOCAL_EXPORT_C_INCLUDES), $(wildcard $(dir)/*.cpp))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog

LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_PATH := $(MY_PATH)
LOCAL_MODULE := my_own_shared_lib
LOCAL_SHARED_LIBRARIES := taglib_module
LOCAL_SRC_FILES := tag_lib_personal.cpp

LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)
Runtime.loadLibrary("taglib_module");
Runtime.loadLibrary("my_own_shared_lib");