2

我正在尝试在我的 C 代码中使用 .a 文件以在 Java 中使用(抱歉我的英语不好)。我为自己创建了一个名为libtest.a. 现在,当我包含该库中存在的文件时,会出现错误,因为没有这样的文件或目录。

我已将其放在我的和所在libtest.a的同一个文件夹中Android.mkApplication.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 而不使用它的代码,所以我希望我足够清楚。

4

2 回答 2

1

.a 文件中没有头文件,只有编译后的代码,它本质上是一个字节流,而不是编码的 .h-files 。这不是 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)
于 2012-07-19T11:41:05.080 回答
1

因为我改变了我的 .mk 文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libtest
LOCAL_SRC_FILES := libtest.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../libtest/jni/include
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)
于 2012-07-23T10:13:30.363 回答