gpt4 book ai didi

android - 静态库预构建失败

转载 作者:太空狗 更新时间:2023-10-29 15:10:54 24 4
gpt4 key购买 nike

我尝试建立一个基于 CMake 脚本的 Android NDK 构建,它动态创建所需的 Android make 文件。虽然我不能使用 JNI 文件夹结构,但我将构建过程拆分为几个单独的 make 脚本:

1st 创建位于项目根目录下的根 Android.mk 文件:

#ANDROID ROOT MAKEFILE

LOCAL_PATH := D:/binrev/repository/bar
include $(CLEAR_VARS)

MY_LOCAL_CFLAGS := -DDEBUG
include D:/binrev/repository/bar/src/Android.mk

2nd 在项目源文件夹中创建源 Android.mk 文件并执行模块构建:

$(info "[INFO] Source Makefile invoked")

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := bar
LOCAL_C_INCLUDES:= D:/binrev/repository/bar/include
LOCAL_SRC_FILES := bar.cpp

ifeq (debug,"debug")
MY_LOCAL_CFLAGS := -DDEBUG
endif

ifeq (false,true)
LOCAL_ARM_MODE := arm
endif

LOCAL_EXPORT_C_INCLUDES := D:/binrev/repository/bar/include

LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += -landroid

LOCAL_STATIC_LIBRARIES += foo

ifeq (OFF, ON)
include $(BUILD_SHARED_LIBRARY)
else
include $(BUILD_STATIC_LIBRARY)
endif

基本上这个机制是有效的,我可以编译我的源代码,但如果我尝试包含库的预构建,我会失败。我尝试了以下方法来包含预构建静态库的(修改后的源/包含定义):

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := lib/android/$(TARGET_ARCH_ABI)/libfoo.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)

源 Android.mk 文件中的第一个预构建定义2nd 调用 import-module 机制并将 Prebuild Android.mk 文件添加到 prebuild-lib根 Android.mk 文件中的第三个预构建定义

[编辑:] 这是同样失败的调用导入测试的 fragment : $(info "[INFO] 源 Makefile 被调用")

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := bar
LOCAL_C_INCLUDES:= D:/binrev/repository/bar/include
LOCAL_SRC_FILES := bar.cpp

ifeq (debug,"debug")
MY_LOCAL_CFLAGS := -DDEBUG
endif

ifeq (false,true)
LOCAL_ARM_MODE := arm
endif

LOCAL_EXPORT_C_INCLUDES := D:/binrev/repository/bar/include

LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += -landroid

LOCAL_STATIC_LIBRARIES += foo

ifeq (ON, ON)
include $(BUILD_SHARED_LIBRARY)
else
include $(BUILD_STATIC_LIBRARY)
endif

$(call import-module, external-deps/foo)

在每种情况下,都会调用具有预构建定义的脚本,但是预构建不执行。当我的 NDK 构建完成后,预构建库和对象不会复制到我的 obj 文件夹中。在我看来,预建是完全无视。但是预构建源的路径是正确的,否则编译失败,缺少文件错误。

您可以在此处获得此测试实现的完整源代码:[测试项目][1] https://sourceforge.net/projects/binrevengine/files/publications/

提示:bar 项目是尝试预构建 foo 项目的项目。 foo 项目包含预构建源。

您可以使用 MinGW64 和 GCC 4.7/4.8 与 CMake 握手并预安装 NDK(使用 r8e)自行构建添加的测试项目。

我完全迷失了方向,没有想法......感谢您的帮助。

最佳答案

Android 构建系统不会构建静态库,除非它被共享库使用。只需创建一个虚拟共享库,将您的静态库作为依赖项,瞧:

include $(CLEAR_VARS)
LOCAL_MODULE := dummy
LOCAL_PATH := $(LOCAL_PATH)
LOCAL_SRC_FILES := dummy.c
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)

关于android - 静态库预构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com