2014-01-15 35 views
0

在Android NDK中,我尝试从小“模块” - 静态库构建共享库。例如:将函数从静态库导出到共享

Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := module1 
LOCAL_SRC_FILES := module1.c 

include $(PREBUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := module2 
LOCAL_SRC_FILES := module2.c 

include $(PREBUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := main-module 

LOCAL_STATIC_LIBRARIES := module1 \ module2 

include $(BUILD_SHARED_LIBRARY) 

但是从模块1和模块2的功能是不可见的,当我尝试从共享libary(主模块)打电话给他们。从module1.c和module2.c

函数是出口的,因为我可以叫他们直接举例来说,如果建立这样的图书馆:

include $(CLEAR_VARS) 

LOCAL_MODULE := module1 
LOCAL_SRC_FILES := module1.c 

include $(BUILD_SHARED_LIBRARY) 

我怎样才能标注在共享库可见的静态库中的函数(如描述在第一个例子中)。可能是所需的任何编译器/链接器标志?

回答

0

使用BUILD_STATIC_LIBRARY而不是PREBUILD_STATIC_LIBRARY。

前者是如何定义'静态库'模块,该模块将包含通过编译LOCAL_SRC_FILES中的源获得的对象文件。

后者不被ndk-build识别,将被默认忽略。

只是为了说明,还存在PREBUILT_STATIC_LIBRARY(注意“T”),它是在您有二进制库文件(例如libmodule1.a)时使用的。

有关模式详细信息,请参阅$ NDK/docs/ANDROID-MK.html。

0

Unfortunatelly BUILD_STATIC_LIBRARY也不起作用。我认为原因是主模块不使用任何源文件,并且如果我至少包含一个使用来自其中一个模块的函数的源文件,这些模块将被包含到主模块中。例如:

Android.mk:

include $(CLEAR_VARS) 

LOCAL_MODULE := module1 
LOCAL_SRC_FILES := module1.c 

include $(BUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := module2 
LOCAL_SRC_FILES := module2.c 

include $(BUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := main-module 
LOCAL_SRC_FILES := mainmodule.c 
LOCAL_STATIC_LIBRARIES := module1 \ module2 

include $(BUILD_SHARED_LIBRARY) 

在示例mainmodule.c使用来自模块1和模块2的一些功能。

但是如何在mainmodule.c中包含静态模块到主模块?