2011-12-29 42 views
1

在我的JNI代碼中,我只使用boost/share_ptr.h但我不知道我應該包含哪個庫,並且讓位置持有者稍後使用它,我剛添加Android.mk中的boost_date庫像這樣。奇怪的NDK編譯與任意Boost庫

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -ldl 
LOCAL_CFLAGS := -I$(LOCAL_PATH)/boost 
LOCAL_MODULE := mathparser 
LOCAL_SRC_FILES := main.cpp pmain.cpp 
LOCAL_STATIC_LIBRARIES := boost_date 
include $(BUILD_SHARED_LIBRARY) 
$(call import-module,boost) 

令人驚訝的是,它成功地編譯並生成了共享庫。請問爲什麼它有效?這是否意味着我可以爲shared_ptr包含任何Boost靜態庫?

回答

1

這是因爲shared_ptr.hpp是頭文件庫。它基本上是一個模板,所以當你寫:

boost::shared_ptr<YourClass> yourPtr; 

編譯器生成適應班「YourClass」首次shared_ptr的代碼。由於最終的代碼取決於您使用哪個類,因此不存在二進制庫。

由於大部分boost庫都是模板,因此頭文件庫不需要在android中做任何特殊的處理,以便將它們用於包含它們。在他們的文檔page中,他們指出哪些庫只是標頭。

+0

我明白它只是頭文件庫,但在這種情況下,我希望它完全沒有鏈接。但是需要boost的任意庫的LOCAL_STATIC_LIBRARIES來編譯我的代碼。這導致了我的問題。感謝您的回答。 – 2012-01-16 15:58:07