FooMain と FooSecondary の 2 つの異なるライブラリのソース コードがあります。FooSecondary は FooMain によって使用されるため、makefile は最初に FooSecondary をコンパイルし、次に FooMain をコンパイルし、次に FooSecondary を FooMain にリンクする必要があります。
私の Android.mk は次のとおりです。
LOCAL_PATH:= $(my-dir を呼び出す) # Foo 二次ライブラリ: # 変数をクリア $(CLEAR_VARS) を含める # ターゲット ビルド LOCAL_ARM_MODE := アーム # ライブラリ名 LOCAL_MODULE := FooSecondary # すべての SRC_FILES をまとめて設定 SRC_FILES := $(ワイルドカード $(LOCAL_PATH)/FooSecondary/src/*.c) SRC_FILES := $(SRC_FILES:$(LOCAL_PATH)/%=%) LOCAL_SRC_FILES = $(SRC_FILES) # ログサポートを有効にする LOCAL_LDLIBS = -llog # C フラグ - 最大最適化 LOCAL_CFLAGS := -O3 -mno-thumb # C++ フラグ - 最大最適化 LOCAL_CPPFLAGS := -O3 -mno-親指 # 共有ライブラリとしてコンパイル $(BUILD_SHARED_LIBRARY) を含める # Foo 二次ライブラリ: # 変数をクリア $(CLEAR_VARS) を含める # OpenCV を含める サードパーティ/OpenCV-2.4.3-rc-android-sdk/sdk/native/jni/OpenCV.mk を含める # ターゲット ビルド LOCAL_ARM_MODE := アーム # ライブラリ名 LOCAL_MODULE := FooMain # すべての SRC_FILES をまとめて設定 SRC_FILES := $(ワイルドカード $(LOCAL_PATH)/FooMain/src/*.cpp) SRC_FILES := $(SRC_FILES:$(LOCAL_PATH)/%=%) LOCAL_SRC_FILES = $(SRC_FILES) LOCAL_SHARED_LIBRARIES := libFooSecondary LOCAL_LDLIBS := -L$(LOCAL_PATH)/../libs/armeabi LOCAL_LDLIBS += -lz -lm -ldl -lGLESv2 -lEGL -llog -lFooSecondary LOCAL_CFLAGS := -O2 -mno-thumb -Wno-write-strings LOCAL_CPPFLAGS := -O2 -mno-thumb -Wno-write-strings # 共有ライブラリとしてコンパイル $(BUILD_SHARED_LIBRARY) を含める
そして、私の Application.mk は次のとおりです。
APP_CPPFLAGS := -frtti -fexceptions APP_STL := gnustl_static APP_ABI := armeabi-v7a
しかし、ndk-build を使用して Android.mk をコンパイルすると、次のエラーが発生します。
Compile arm : libFooSecondary <= *.c
SharedLibrary : libFooSecondary.so
Install : libFooSecondary.so => libs/armeabi-v7a/libFooSecondary.so
SharedLibrary : libFooMain.so
/home/user/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: cannot find -lFooSecondary
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/libFooMain.so] Error 1
libFooSecondary.so が正しくコンパイルおよびインストールされているのに、なぜ libFooSecondary.so が見つからないのですか?
さらに、LOCAL_MODULE の名前が変更された場合、たとえば、最初の名前が LOCAL_MODULE := zname で、2 番目の名前が LOCAL_MODULE := aname の場合、最初に 2 番目の名前をコンパイルします。理由はわかりません。