ndk-build
によって作成された実行可能ファイルを、NDK で既にビルドされている既存の .so ライブラリにリンクしようとしています。これが私のAndroid.mk
ファイルです:
LOCAL_PATH := $(call my-dir)/..
include $(CLEAR_VARS)
LOCAL_MODULE := mini_executor
LOCAL_C_INCLUDES := ../..
LOCAL_SRC_FILES := main.cpp
LOCAL_CXXFLAGS += -std=c++11
LOCAL_STATIC_LIBRARIES := mylib
include $(BUILD_EXECUTABLE)
ビルドしようとすると未定義の参照が大量に発生します。これは、リンク プロセスが機能していないことを意味します。案の定、V=1
ndk-build でスイッチを有効にすると、次の行が表示されます。
"Compile++ thumb : mini_executor <= main.cpp
C:/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/mini_executor/main.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I../.. -IC:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/include -IC:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include -IC:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/include/backward -Ijni/.. -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -IC:/android-ndk-r9/platforms/android-3/arch-arm/usr/include -c jni/../main.cpp -o ./obj/local/armeabi/objs/mini_executor/main.o
Executable : mini_executor
C:/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=C:/android-ndk-r9/platforms/android-3/arch-arm ./obj/local/armeabi/objs/mini_executor/main.o C:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/libgnustl_static.a -lgcc -no-canonical-prefixes -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lc -lm -o ./obj/local/armeabi/mini_executor
私が気付いた唯一のことは、これらのコマンドのどこにも、.mk ファイルで指定した既存の .so ファイルへのリンクに関する記述がないことです。と の両方LOCAL_SHARED_LIBRARIES
を使用してみましLOCAL_STATIC_LIBRARIES
たが、どちらも何もしません。ライブラリにリンクしようとしているようにも見えません。ここで何が欠けていますか?