2014-01-15 70 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中包含靜態模塊到主模塊?