2011-12-29 6 views
1

私のJNIコードでは、boost/share_ptr.hのみを使用していますが、どのライブラリを含めるべきかわかりませんでした。このようなAndroid.mkのboost_dateライブラリ。任意のBoostライブラリを使った奇妙なNDKコンパイル

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のコードを生成します。あなたが書くとき、それはとても基本的にテンプレートです。最終的なコードは、使用するクラスに依存するため、バイナリライブラリはありません。

ブーストライブラリのほとんどはテンプレートであり、したがってヘッダーライブラリであるため、アンドロイドで特別な操作を行う必要はありません。彼らの文書では、pageはどのライブラリがヘッダのみであるかを示しています。

+0

私はそれがヘッダーのみのライブラリだと理解していますが、その場合、何もリンクしないことを期待しました。しかし、私のコードをコンパイルするために、任意のライブラリのLOCAL_STATIC_LIBRARIESが必要でした。それは私の質問につながった。ご回答有難うございます。 –

関連する問題