2011-12-29 43 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