2013-10-05 22 views
6

私はC++で書かれたAndroidプロジェクトを持っており、リンクフェーズに問題があります。コードは、一緒にリンクされるべきいくつかの静的ライブラリに置かれます。Android:自分の静的ライブラリを正しくリンクするには?

私はこのトピックについて多くの質問と回答をネットで見つけました。そのほとんどは、ライブラリをAndroid.mkファイルのLOCAL_STATIC_LIBRARIESに入れることを提案しています。しかし、私がこれを行うと、LOCAL_STATIC_LIBRARIESの内容が単に無視されることがわかりました:私のライブラリはリンクされておらず、ここにダミーのテキストを追加してもエラーや警告メッセージは生成されません。

私はそれをこの方法を試してみました:

LOCAL_STATIC_LIBRARIES := MyLib.a 

またはフルパスで:それらの

LOCAL_STATIC_LIBRARIES := $(LOCAL_PATH)/MyLib.a 

どれも働きました。

静的ライブラリをLOCAL_LDLIBSにするとリンクされますが、非システムライブラリに関する警告メッセージが表示され、おそらくビルドが間違っています。

私Android.mkファイルの内容は次のとおりです。

LOCAL_LDLIBS := $(LOCAL_PATH)/MyLib.a ... 

と私は、このメッセージを得た:私はLOCAL_STATIC_LIBRARIES正しい方法を使用する方法を見つけることができませんでした

Android NDK: WARNING:jni/Android.mk:myapp: non-system libraries in linker flags: jni/MyLib.a  
Android NDK:  This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES  
Android NDK:  or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the  
Android NDK:  current module  

を、私を助けてください!

私はopenSUSEのx86の上アンドロイド - NDK-R9とAndroid-sdk_r22.2.1を持っているし、ターゲット=アンドロイド-18

+0

ハローを使用して、それを含めることができます?私も同じ向きです。あなたが私を助けることができるなら/// –

答えて

1

を使用すると、おそらく問題は、あなたがライブラリの拡張を与えていることである:

私は、それはのように記述されるべきだと思う
LOCAL_STATIC_LIBRARIES := MyLib.a 

LOCAL_STATIC_LIBRARIES := MyLib 
5

はJBLの答えhereを参照してください。

LOCAL_STATIC_LIBRARIES変数がそのように機能しません。まず、あなたが含まれるようにするライブラリを定義するセクションが必要になります。

include $(CLEAR_VARS) 
LOCAL_PATH = . 
LOCAL_MODULE := curl 
LOCAL_EXPORT_C_INCLUDES := ../curl/include 
LOCAL_SRC_FILES := ../curl/lib/libcurl.a 
include $(PREBUILT_STATIC_LIBRARY) 

THEN、あなたがあなたの問題を解決しなかった

include $(CLEAR_VARS) 
LOCAL_MODULE = mylib 
CFLAGS = ... 
... 
LOCAL_STATIC_LIBRARIES = curl 
include $(BUILD_STATIC_LIBRARY) 
関連する問題