2016-09-27 8 views
0

CスタティックライブラリをC++共有ライブラリにリンクしようとしていますが、共有ライブラリはLOCAL_STATIC_LIBRARIES行を完全に無視し、静的ライブラリをリンクしていないようです。Android NDKはあらかじめ作成されたライブラリをリンクしていません

TextureEngineは静的なlibで、CustomTextureは共有ライブラリです。ここで作るファイルは


静的ライブラリです - TextureEngine

Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := TextureEngine 
LOCAL_SRC_FILES := ../TextureEngine.c 
# LOCAL_SHARED_LIBRARIES := 
#LOCAL_LDLIBS := -llog -landroid -lGLESv2 
include $(BUILD_STATIC_LIBRARY) 

Application.mk:

APP_ABI := all 
APP_PLATFORM := android-23 
APP_MODULES := TextureEngine 

共有ライブラリ - CustomTexture

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := TextureEngine 
LOCAL_SRC_FILES := \ 
    ../TextureEngine/obj/local/$(TARGET_ARCH_ABI)/libTextureEngine.a 
LOCAL_LDLIBS += -landroid -lGLESv2 -lm -lz -llog 
include $(PREBUILT_STATIC_LIBARAY) 


include $(CLEAR_VARS) 
LOCAL_MODULE := CustomTexture 
LOCAL_STATIC_LIBRARIES := TextureEngine 
LOCAL_C_INCLUDES := ../TextureEngine 
LOCAL_SRC_FILES := \ 
    ../CustomTexture.cpp \ 
    ../TextureProvider.cpp \ 
    ../Logfile.c \ 
    ../SineImage.cpp 
LOCAL_LDLIBS += -landroid -lGLESv2 -lm -lz -llog 
include $(BUILD_SHARED_LIBRARY) 

Application.mk

APP_STL := gnustl_static 
APP_CPPFLAGS += -std=c++11 
APP_ABI := all 
APP_PLATFORM := android-23 

私はTextureEngine上NDKビルドを実行すると、私はすべてのアーキテクチャフォルダにlibTextureEngine.aファイルを取得します。しかし、CustomTextureでndk-buildを実行すると、未定義の参照が得られます。 TextureEngineリンカーラインに表示されません - あなたはおそらく見ることができるようにCustomTextureにV = 1とNDK-構築実行

[arm64-v8a] SharedLibrary : libCustomTexture.so 
/opt/android-ndk-r12b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-g++ -Wl,-soname,libCustomTexture.so -shared --sysroot=/opt/android-ndk-r12b/platforms/android-23/arch-arm64 ./obj/local/arm64-v8a/objs/CustomTexture/__/CustomTexture.o ./obj/local/arm64-v8a/objs/CustomTexture/__/TextureProvider.o ./obj/local/arm64-v8a/objs/CustomTexture/__/Logfile.o ./obj/local/arm64-v8a/objs/CustomTexture/__/SineImage.o /opt/android-ndk-r12b/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/libgnustl_static.a -lgcc -no-canonical-prefixes -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -L/opt/android-ndk-r12b/platforms/android-23/arch-arm64/usr/lib -landroid -lGLESv2 -lm -lz -llog -lc -lm -o ./obj/local/arm64-v8a/libCustomTexture.so 

を与えます。確かに、私はCustomTextureのAndroid.mkの事前構築された部分のLOCAL_SRC_FILESを変更することができます - そして新しいエラーは発生しません。

なぜndk-buildはTextureEngineを試してリンクしませんか?

答えて

3
include $(PREBUILT_STATIC_LIBARAY) 

ここでタイプミスがあるためです。 LIBRARY、ないLIBARAY :)

私は実際にその簡単な間違いのこの種を作成し、任意のものを有していないために理由を説明している、存在しないLOCAL_STATIC_LIBRARIESまたはLOCAL_SHARED_LIBRARIESのモジュールは、実際にエラーが発生することはありません昨夜のバグを発見しましたビルドのエラーをクリアします。

+0

私はそれを信じることはできません。私は、このタイプミスがプロジェクトのバッファーに費やした時間を共有したくないのです。どうもありがとうございました! – Nitay

+0

ファイルにインクルードの1つが見つからなかった場合は、驚いたndk-buildのほうが先に警告しませんでした+ LOCAL_STATIC_INDLUDESは存在しないライブラリを参照していました。 – Nitay

+0

ええ、これは私にとっても非常に驚きでした。私はちょうどr14にあるべきでこれのための修正をアップロードしました:https://github.com/android-ndk/ndk/issues/208 –

関連する問題