我正在尝试在我的 C 代码中使用 .a 文件以在 Java 中使用(抱歉我的英语不好)。我为自己创建了一个名为 libtest.a
的静态库。现在,当我包含该库中存在的文件时,会出现错误,因为没有这样的文件或目录。
我已将 libtest.a
放在 Android.mk
和 Application.mk
所在的同一文件夹中
C 代码:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
#include <exp.h> //the header in libtest.a
这是我的 makefile:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libtest
LOCAL_SRC_FILES := libtest.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := socket
LOCAL_SRC_FILES := source/interface.c source/file.c
LOCAL_LDFLAGS += libtest.a
include $(BUILD_SHARED_LIBRARY)
编译时出现以下错误
error: exp.h: No such file or directory
我想使用 .a 而不使用它的代码,所以我希望我足够清楚。
最佳答案
.a 文件中没有头文件,只有编译后的代码(本质上是字节流),而不是编码的 .h 文件。这不是Java。要使用 libtest.a
,您必须提供 exp.h
文件以及任何依赖的头文件。
您应该使用 LOCAL_STATIC_LIBRARIES
来实现此目的。
include $(CLEAR_VARS)
LOCAL_MODULE := libtest
LOCAL_SRC_FILES := libtest.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := socket
LOCAL_SRC_FILES := source/interface.c source/file.c
LOCAL_STATIC_LIBRARIES += libtest
include $(BUILD_SHARED_LIBRARY)
关于c - NDK-C 文件中 .a 文件的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559872/