Android NDK 不会链接预构建的库
Android NDK doesn't link prebuilt library
我试图将C静态库链接到C++共享库,但共享库似乎完全忽略了LOCAL_static_LIBRARIES行,并且没有链接静态库。
TextureEngine是静态库,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)
应用程序.mk
APP_STL := gnustl_static
APP_CPPFLAGS += -std=c++11
APP_ABI := all
APP_PLATFORM := android-23
当我在TextureEngine上运行ndk构建时,我会在所有架构文件夹上获得libTextureEngine.a文件。然而,当我在CustomTexture上运行ndk构建时,我会得到未定义的引用。
在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
正如您可能看到的,TextureEngine没有出现在链接器行中。果不其然,我可以在CustomTexture的Android.mk的预构建部分更改LOCAL_SRC_FILES,并且不会出现新的错误。
为什么ndk build不尝试链接TextureEngine?
include $(PREBUILT_STATIC_LIBARAY)
因为这里的拼写错误。LIBRARY
,而不是LIBARAY
:(
事实上,我昨晚发现了一个错误,LOCAL_STATIC_LIBRARIES
或LOCAL_SHARED_LIBRARIES
中不存在的模块实际上不会导致错误,这解释了为什么很容易犯这种错误,并且在构建中没有任何明显的错误。
相关文章:
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 如何在构建链接列表时调整头、尾指针
- 在树莓派上用libtorch构建程序时的链接问题
- 未知的 GCC 链接器错误,但已成功构建
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 如何在 Linux 中构建共享库时使未定义引用的链接器失败
- 链接两个使用 c++ 构建的库_static
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- 如何在Windows上链接动态构建的cmake文件
- 使用cmake构建google测试单元测试时出现链接器错误
- 使用 gcc 6 构建 OpenJDK8 时出现链接错误
- 如何在bazel中使用make规则链接库构建
- 使用 pybind11 构建库,链接其他共享库
- 使用 VS2017 构建 OpenSSL 后出现一些链接错误。 " OPENSSL_init_ssl referenced in function _main " ?
- 如何使用由for循环创建的向量向量构建链接列表
- 如何让OCaml链接器标志与C++cmake构建链接
- VisualStudio2013下的Google gRPC(C++)构建.链接错误
- Qt Creator项目无法在Windows上构建(链接器错误)
- Xcode中的c++构建链接器错误