如何解决Android Studio CMake链接库失败
我有一个具有native-lib.c
文件的android studio Native C ++项目。在其中,我正在使用其他静态C ++库。库已链接好,但我在Linking C shared library C:\user....\libnative-lib.so
其中有很多错误:
error: undefined reference to 'operator new(unsigned int)'
error: undefined reference to 'operator delete(void*)'
error: undefined reference to '__cxa_end_catch'
error: undefined reference to '__dynamic_cast'
...ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld:
the vtable symbol may be undefined because the class is missing its key function
我仅针对abi x86进行构建,我已将其放入gradle中:
ndk {
abiFilters "x86"
}
我已经检查了我的其他库也是为x86 abi构建的。为什么会发生这种情况有帮助吗?
我发现了这一点: NDK r18中不再包含GNU的libstdc ++。您需要使用libc ++。
我正在使用ndk21。但是当我没有指定使用libstdc++
时,我不知道为什么它会给我错误。我的native-lib.c
中包含此内容:
#include <jni.h>
#include <string.h>
#include <malloc.h
谢谢。
更新:
CMakeLIsts.txt
cmake_minimum_required(VERSION 3.10.2)
add_library( native-lib SHARED
native-lib.c )
find_library( log-lib
log )
add_library(MyLib STATIC IMPORTED)
set_target_properties(MyLib PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libMyLib.a)
target_link_libraries( native-lib
android
${log-lib} )
为了构建MyLib.a,我使用Qt构建了静态库。我使用的是Qt static 5.14.2版本,对于该套件中的编译器,从NDK 21.1.635中选择了Android Clang C和Android Clang C ++。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。