c - NDK-C 文件中 .a 文件的使用

标签 c makefile android-ndk java-native-interface

我正在尝试在我的 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 而不使用它的代码,所以我希望我足够清楚。

最佳答案

.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/

相关文章:

android - 仅在Android上查询时出现SQL逻辑错误

makefile - 直接在目标依赖中定义 "continue if error"策略

makefile - CENTOS - Linux - Make - Makefile(获取用户输入不起作用)

android - Poco C++ for Android 链接问题

c - 用于任意精度算术的 GCD 算法

c++ - 获取文件指针的位置

c - 打印无法识别的 int 变量会输出什么?

objective-c - 使用未声明的标识符 '_bridge'

c - 带有自定义 Makefile 的 Eclipse C 调试器

android - NDK : Is it possible to define the android NDK Version in build. gradle 所以 native 代码将使用定义的版本?