2011-12-29 3 views
1

В моем коде JNI я использую boost/share_ptr.h. Но я не знал, какую библиотеку я должен включить и для владельца места, чтобы работать с ней позже, я просто добавил boost_date в Android.mk.Компиляция Strange 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) 

Удивительно, но ему удалось скомпилировать и сгенерировать общую библиотеку. Могу ли я спросить, почему это сработало? Означает ли это, что я могу включить любую статическую библиотеку Boost для shared_ptr?

ответ

1

Это потому, что shared_ptr.hpp является библиотекой заголовков. Это в основном шаблон так, когда вы пишете:

boost::shared_ptr<YourClass> yourPtr; 

компилятор генерирует код shared_ptr, приспособленный к классу «YourClass» в первый раз. Поскольку конечный код зависит от того, какой класс вы используете, нет бинарной библиотеки.

Поскольку большинство библиотек ускорения являются шаблонами и, следовательно, библиотеками заголовков, вам не нужно делать что-либо особенное в android, чтобы использовать их отдельно от их включения. В своей документации page они указывают, какие библиотеки являются только заголовками.

+0

Я понимаю, что это только библиотека заголовков, но в этом случае я ожидал, что она вообще ничего не свяжет. Но LOCAL_STATIC_LIBRARIES любой произвольной библиотеки в boost был необходим для компиляции моего кода. Это привело к моему вопросу. Спасибо за Ваш ответ. –