2011-04-15 104 views
5

我需要基于预先构建的静态库构建共享库。 我的makefile文件的src /安卓/外部/ mycode的/ Android.mk:在Android构建系统中包含预构建的静态库

LOCAL_PATH:= $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_ARM_MODE := arm 
LOCAL_MODULE := libMyStatic 
LOCAL_SRC_FILES := libStatic.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE_TAGS := eng 
LOCAL_ARM_MODE := arm 
LOCAL_PRELINK_MODULE := false 
LOCAL_MODULE := libMyShared 
LOCAL_WHOLE_STATIC_LIBRARIES := libMyStatic 
include $(BUILD_SHARED_LIBRARY) 

我做构建它:mmm external/mycode 并且得到错误:

make: *** No rule to make target `out/target/product/generic/obj/STATIC_LIBRARIES/libMyStatic_intermediates/libMyStatic.a', needed by `out/target/product/generic/obj/SHARED_LIBRARIES/libMyShared_intermediates/LINKED/libMyShared.so'. Stop. 
make: Leaving directory `/home/test/src/android' 

如果我做的手工和运行以下嗯再次它的工作原理:

cp external/mycode/libStatic.a out/target/product/generic/obj/STATIC_LIBRARIES/libMyStatic_intermediates/libMyStatic.a 

如果我做一个NDK项目,并使用该Android.mk文件我想调用NDK,构建脚本,当它工作的时候了。所以这个问题与我使用Android Build系统时libMyStatic.a文件没有创建并复制到中间文件夹有关。 任何人都可以告诉我什么我需要设置使生成系统将静态库复制到中间文件夹?

+0

我来与同类problem.Haveü解决它ü不介意与我分享乌尔方式THX – 2013-02-01 05:50:39

+0

也许这可以帮助您:使用Android.mk链接预构建的共享库] [1] [1]:http://stackoverflow.com/questions/14322766/android-link-prebuilt-shared-library-so-within-jar-file-in-ndk – mrAlmond 2013-02-26 11:33:44

回答

4

修改您的MK文件

"LOCAL_WHOLE_STATIC_LIBRARIES := libMyStatic" 

"LOCAL_LDFLAGS += -lMyStatic 
1

尝试建立你的静态库这样。 ?

include $(CLEAR_VARS) 

LOCAL_MODULE := libMyStatic 
LOCAL_MODULE_CLASS := STATIC_LIBRARIES 
LOCAL_MODULE_SUFFIX := .a 
LOCAL_SRC_FILES := libMyStatic.a 

include $(BUILD_PREBUILT) 
+0

这不是一个完整的解决方案... – Flayn 2015-09-03 07:38:44

+0

它几乎完成,取决于你放置预建库的位置。在我的情况下,它不在外部文件夹中。我不得不编辑父目录中的makefile以使AOSP构建系统知道我的lib,它的依赖项和它的依赖项! – Paschalis 2015-12-02 08:52:24