2011-08-03 13 views
3

私は問題に直面しており、なぜこれが起こっているのか知りたいと思います。android-ndkコードをコンパイルする際の問題

私はJavaファイルとJNI & C++コードファイルからなるプロジェクトを持っています。私はアンドロイドのndkツールの一部であるを通してJNI and C++コードを構築しています。以下はcubeモジュール上記のスクリプトで私のAndroid.mkファイル

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := cube 
LOCAL_CFLAGS := -DANDROID_NDK 
LOCAL_SRC_FILES := Testing.cpp 
LOCAL_LDLIBS := -lGLESv1_CM 
include $(BUILD_SHARED_LIBRARY) 


include $(CLEAR_VARS) 
LOCAL_MODULE := jni_opengl 
LOCAL_SRC_FILES := jni_openglcube.cpp 
LOCAL_SHARED_LIBRARIES := cube 
include $(BUILD_SHARED_LIBRARY) 

は、いくつかのopenglものを行うとjni_openglJNIに書かれている標準C++で書かれています。上記のスクリプトはうまくコンパイルされますが、私が行8を変更したときにinclude $(BUILD_SHARED_LIBRARY)include $(BUILD_STATIC_LIBRARY)に変更すると、Testing.cppに見つからないOpenGLメソッドに関するエラーが発生します。

私の質問はshared libraryの場合、に変更すると、アンドロイドはopengl関連の参照の参照を見つけることができますか?

答えて

0

共有ライブラリに必要なシンボルは、実行時に参照されることがあります。だから、あなたは同じ問題に遭遇したと思うが、今は実行時にリンクする時間がない。共有ライブラリを持つコードが実行されているかどうかを確認します。

0

私はあなたが持っている必要はないと思う:

LOCAL_LDLIBS := -lGLESv1_CM 

あなたの静的ライブラリのために。

共有ライブラリセクションに移動する必要があります。静的セクションは無くても問題ありません。

変更することを忘れないでください:

LOCAL_SHARED_LIBRARIES := cube 

静的ライブラリ

LOCAL_STATIC_LIBRARIES := cube 

には、一緒に追加さ.oファイルのちょうど束であるので、それは「結合」されません。共有ライブラリと同じ方法です。

あなたの最終Android.mkは、次のようになります。

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libcube 
LOCAL_CFLAGS := -DANDROID_NDK 
LOCAL_SRC_FILES := Testing.cpp 
include $(BUILD_STATIC_LIBRARY) 


include $(CLEAR_VARS) 
LOCAL_MODULE := jni_opengl 
LOCAL_SRC_FILES := jni_openglcube.cpp 
LOCAL_STATIC_LIBRARIES := libcube 
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog 
include $(BUILD_SHARED_LIBRARY) 
関連する問題