0

Cygwin ターミナル経由で「ndk-build」を実行して、Android NDK 関数 (「AAsset_close」など) を呼び出す Android-9 プロジェクトをコンパイルしようとしていますが、「ndk-build」コマンドはエラー メッセージを返します。関数定義が見つかりません。

「ndk-build」からのエラー メッセージは次のとおりです。

[Android NDK パス]/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm -linux-androideabi/bin/ld.exe: [プロジェクト フォルダ]/static ライブラリ: 関数内 [関数名]:[ファイル名]:39: エラー: 'AAsset_close' への未定義参照

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

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := <name of project>
LOCAL_C_INCLUDES := <folders where header files are located>
LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O2 -Wall -D__ANDROID__ -DtyANDROID
LOCAL_CPPFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O2 -Wall -D__ANDROID__ -DtyANDROID
LOCAL_LDLIBS := -lm -lEGL -lGLESv2 -llog -lz -landroid
LOCAL_STATIC_LIBRARIES := android_native_app_glue

LOCAL_ARM_MODE  := arm  

LOCAL_SRC_FILES := <source files>

include $(BUILD_STATIC_LIBRARY)
...

私の「Application.mk」メイクファイルは次のとおりです。

APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-9

「nm」Unix コマンドによると、この関数は、すべてのターゲット プラットフォームの NDK パスに存在する Android NDK ライブラリ「libandroid.so」内で定義されます。上で示したように、「-landroid」を「LOCAL_LDLIBS」マクロに含めました。これにより、そのライブラリにリンクできるようになります。このコンパイル エラーを修正するには、他に何をする必要がありますか?

4

1 に答える 1

3

静的ライブラリをビルドすることを示しますAndroid.mk。このステップではリンカーは呼び出されないため、$(LOCAL_LDLIBS)無視されます。おそらく別Android.mkのセクションまたは別のセクションがあります。

include $(BUILD_SHARED_LIBRARY)  

確認してください-landroid。おそらくそのセクションが欠落しています。

于 2013-01-26T06:21:07.217 に答える