链接预构建的静态库ndk与Android源代码

链接预构建的静态库ndk与Android源代码,android,android-ndk,linker,static-libraries,Android,Android Ndk,Linker,Static Libraries,我最近发现,从ndk构建链接预构建的静态库与在android源代码树(mm)中链接预构建的静态库有着根本的不同。为什么会这样 // main.cpp #include <stdio.h> #include "doubler.hpp" int main() { printf("test a static lib \n"); // library function doubler *p = new doubl

我最近发现,从ndk构建链接预构建的静态库与在android源代码树(mm)中链接预构建的静态库有着根本的不同。为什么会这样

   // main.cpp
   #include <stdio.h>
   #include "doubler.hpp"

    int main()
    {
       printf("test a static lib \n");

       // library function
       doubler *p = new doubler();
       delete p;

       return 0;
    }
最终,在src树中链接静态库的正确方法是什么

为什么会这样

   // main.cpp
   #include <stdio.h>
   #include "doubler.hpp"

    int main()
    {
       printf("test a static lib \n");

       // library function
       doubler *p = new doubler();
       delete p;

       return 0;
    }
ndk构建和AOSP构建系统是两个完全不同的构建系统,不幸的是它们看起来非常相似

最终,在src树中链接静态库的正确方法是什么

在AOSP树中?预构建模块的定义不同。以下是几个例子:

然后,您可以像使用任何其他库一样使用它们:
LOCAL\u STATIC\u库:=libmyprebuild
。以上两个示例均适用于主机模块。对于目标模块,只需删除该行即可


请注意,AOSP的新(仍在进行中)构建系统Soong尚未支持预构建模块。现在只能在Android.mk文件中定义这些内容。

这很有效。谢谢值得注意的是,本地模块似乎会告诉构建系统该模块是主机/树的一部分?因此,如果您提供了自己的静态库,那么请省略这一行
include $(CLEAR_VARS)
LOCAL_MODULE := libbcc
LOCAL_SRC_FILES := $(HOST_OS)/lib64/$(LOCAL_MODULE)$(HOST_SHLIB_SUFFIX)
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(HOST_SHLIB_SUFFIX)
LOCAL_IS_HOST_MODULE := true
LOCAL_MULTILIB := 64
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
LOCAL_IS_HOST_MODULE := true
LOCAL_MODULE := AdbWinApi
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_SRC_FILES_x86 := AdbWinApi.a
LOCAL_MODULE_SUFFIX := .a
LOCAL_MULTILIB := 32
LOCAL_MODULE_HOST_OS := windows
include $(BUILD_PREBUILT)