[英]Android NDK doesn't link prebuilt library
我正在尝试将C静态库链接到C ++共享库,但是似乎共享库完全忽略了LOCAL_STATIC_LIBRARIES行,并且没有链接静态库。
TextureEngine是静态库,而CustomTexture是共享库。 这是make文件
静态库-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-build时,在所有体系结构文件夹中都得到libTextureEngine.a文件。 但是,当我在CustomTexture上运行ndk-build时,会得到未定义的引用。
在CustomTexture上以V = 1运行ndk-build给出
[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
您可能会看到-TextureEngine没有出现在链接器行中。 当然,我可以在CustomTexture的Android.mk的预构建部分上更改LOCAL_SRC_FILES-并且不会出现新的错误。
为什么ndk-build不尝试链接TextureEngine?
include $(PREBUILT_STATIC_LIBARAY)
因为这里的错字。 LIBRARY
,而不是LIBARAY
:)
昨晚我实际上发现了一个错误,该错误中LOCAL_STATIC_LIBRARIES
或LOCAL_SHARED_LIBRARIES
中不存在的模块实际上不会导致错误,这解释了为什么容易产生这种错误并且在您的构建中没有任何明显的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.