解决Android makefile中的循环依赖

解决Android makefile中的循环依赖,android,ndk-build,Android,Ndk Build,我们正在进行一个项目,需要从静态库创建一个共享库。我们面临的问题是静态库包含循环依赖项。以下是我的makefile示例: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := Mylib1 LOCAL_SRC_FILES := lib/libMylib1.a include $(PREBUILT_STATIC_LIBRARY) .... ....

我们正在进行一个项目,需要从静态库创建一个共享库。我们面临的问题是静态库包含循环依赖项。以下是我的makefile示例:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) 
LOCAL_MODULE := Mylib1
LOCAL_SRC_FILES := lib/libMylib1.a
include $(PREBUILT_STATIC_LIBRARY)

           ....

           ....

           ....

LOCAL_MODULE  := DisplayDriver

LOCAL_SRC_FILES := \

            file1.c \
            file2.c \
            file3.c

LOCAL_STATIC_LIBRARIES := -Wl,--start-group \

                       Mylib1 \
                       Mylib2 \
                       Mylib3 \
                       Mylib4 \
                      -Wl,--end-group


LOCAL_C_INCLUDES :=  \

           $(LOCAL_PATH)/include \
           $(LOCAL_PATH)/examples \


LOCAL_CFLAGS := -x c -DHAVE_STDINT -DHAVE_SETENV -DNDEBUG -c

LOCAL_LDLIBS += -llog

APP_ABI := armeabi-v7a

include $(BUILD_SHARED_LIBRARY)
当我给出ndk build V=1时,我可以在输出中清楚地看到-Wl、-start group和-Wl、-end group在创建共享库时从编译中删除。那么,是否还有其他明显的标志,而我却遗漏了同样的标志


我正在windows 7 64位上使用NDK R9。

似乎忽略了本地静态库中指定的
-Wl,--start group

过去存在本地组静态库,在链接时将静态库与
-Wl、-start-GROUP
-Wl、-end-GROUP
进行分组

现在(ndk-10c)唯一相关的变量是使用链接器标志
--WHOLE archive
的本地\u整\u静态\u库

当几个静态库之间存在循环依赖关系时,这通常很有用。请注意,当用于构建共享库时,这将强制将整个静态库中的所有对象文件添加到最终二进制文件中。但在生成可执行文件时,情况并非如此

不完全相同,但可能解决依赖性问题

在我的项目中,我创建了一个专用的cpp文件,该文件显式引用了有问题的符号

auto i_reference_you =
{
    (void *)MyClass::some_symbol,
    (void *)some_other_symbol
};
这对我来说很有效,因为只有几个符号。它没有什么优雅之处,只是让我免于与构建系统抗争。

严格来说并不是一个复制品,但它也解决了这个问题。