0

嗨,我需要在我的本机代码中使用预构建的库,所以我将库放在 ndk/samples/native-activity 中的示例之后。下面是结构。请有人帮我解决这个错误,找不到 dsplink.h。提前致谢 :)

目录结构

安卓.mk

错误

你好-jni.c

4

4 回答 4

1

我认为弗拉基米尔是在正确的轨道上。但是不要将静态库保留在 obj 文件夹中,因为每次运行都会删除该库,而是创建一个 jni/modules/precompiled 或其他东西并将这些东西放在那里...

你所拥有的是一个预编译的静态库。这就是 .a 文件。它旨在将其添加到编译过程中,以便它将在最终的二进制文件中。所以你应该拥有的是:

#
# DSPLINK
#
include $(CLEAR_VARS)
LOCAL_MODULE    := dsplink
LOCAL_SRC_FILES  := [path-to-prebuilt-lib]/libdsplink.a
LOCAL_EXPORT_C_INCLUDES := [path-to-dsplink-headers-folder]
include $(PREBUILT_STATIC_LIBRARY)

并且不要忘记将它包含在项目中的链接器中。所以在主共享库的这一部分下面添加这一行:

LOCAL_STATIC_LIBRARIES := dsplink
于 2012-06-19T07:51:18.297 回答
0

您的 C 文件包括dsplink.h文件。如果你有它,你应该在 中添加这个文件的完整路径LOCAL_C_INCLUDES,例如

LOCAL_MODULE     := jnihello
LOCAL_C_INCLUDES := $(LOCAL_PATH)/inlcudes

顺便说一句,如果dsplink.a文件是预先构建的,那么您可以安全地将其保存在libs/文件夹之外,这样make clean就不会删除它。你可以使用类似的东西

LOCAL_LDFLAGS += $(LOCAL_PATH)/prebuilt/dsplink.a

帮助链接器找到文件。

于 2012-06-17T14:16:24.283 回答
0

libmath-prebuilt.so 是一个预建库,其中包含一些供 buyya_read.c 使用的功能。首先使用 ndk-build 生成 libmath-prebuilt.so 并保存在 jni 文件夹中,buyya_read.c 保存在 elcipse 中的项目中。

Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := math-prebuilt
LOCAL_SRC_FILES = libmath-prebuilt.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := buyya_read
LOCAL_SRC_FILES := buyya_read.c
LOCAL_LDLIBS    := -llog
LOCAL_SHARED_LIBRARIES := math-prebuilt
include $(BUILD_SHARED_LIBRARY)

您可以在下图中看到项目目录结构。 项目目录结构

于 2016-06-22T07:01:05.417 回答
-1

dsplink您应该在项目之前在 Android.mk 中定义预建库jnihello

#
# DSPLINK
#
include $(CLEAR_VARS)
LOCAL_MODULE    := dsplink
LOCAL_SRC_FILES  := [path]/libs/armeabi/libdsplink.so
LOCAL_EXPORT_C_INCLUDES := [directory-with-dsplink.h-file]
include $(PREBUILT_STATIC_LIBRARY)
...
# jnihello
于 2012-06-15T08:47:49.180 回答