我在用 NDK r6 编译静态库的时候遇到奇怪的问题:NDK 根本就没有执行编译。Android.mk 文件如下:LOCAL_PATH:=$(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= add.c
LOCAL_MODULE:=libadd
LOCAL_PRELINK_MODULE := false
include $(BUILD_STATIC_LIBRARY)如果换成动态库(即将 BUILD_STATIC_LIBRARY 改为 BUILD_SHARED_LIBRARY),则会正常生成动态库。
如果同时编译可执行文件,则也能执行编译,但编译生成的只有可执行文件,而没有独立的静态库。编译可执行文件的Android.mk 文件如下:LOCAL_PATH:=$(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= add.c
LOCAL_MODULE:=libadd
LOCAL_PRELINK_MODULE := false
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=test.c
LOCAL_MODULE:=test
LOCAL_STATIC_LIBRARIES:=libadd
include $(BUILD_EXECUTABLE)
谢谢!

解决方案 »

  1.   

    NDK r6 默认不支持静态库的 install 操作。可以将 definitions.mk 脚本里的module-class-is-installable = $(if $(NDK_MODULE_CLASS.$1.INSTALLABLE),$(true),$(false))修改为:module-class-is-installable = $(if $(NDK_MODULE_CLASS.$1.INSTALLABLE),$(true),$(true))
    这样强制 NDK 对静态库进行 install,即可单独生成静态库。
      

  2.   

    写一mk文件在,然后,将其命名为Application.mk(和Android.mk文件在同一级目录哦),Application.mk文件的内容APP_MODULES      := libtwolib-first(注意libtwolib-first是要编译静态库的名字),保存后。就可以编译静态库咯。