Android studio CMake链接库失败 我有Android Studio本地C++项目,它有本地LIB。在里面,我使用的是其他静态C++库。库链接正常,但我在链接C共享库C:\user…\libnative lib时出错。因此
有很多错误,其中一些是:Android studio CMake链接库失败 我有Android Studio本地C++项目,它有本地LIB。在里面,我使用的是其他静态C++库。库链接正常,但我在链接C共享库C:\user…\libnative lib时出错。因此,android,c++,c,cmake,android-ndk,Android,C++,C,Cmake,Android Ndk,有很多错误,其中一些是: 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
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构建的。为什么会发生这种情况
我发现:GNU的libstdc++不再包含在NDK r18中。您需要使用libc++。
我正在使用ndk 21。但我不知道当我没有指定使用libstdc++
时,为什么会出现错误。我的本机lib.c
中包含以下内容:
#include <jni.h>
#include <string.h>
#include <malloc.h
为了构建MyLib.a,我使用Qt来构建静态库。我使用Qt Stime5.5.2版本,对于套件中的编译器,从NDK 21.1.635中选择Android CLANC和Android CLANC++。您是否使用了您现在尝试使用的同一个编译器?感谢您的评论我更新了我的问题本机库只包含一个C文件,因此它作为C库链接。将扩展名更改为.cpp。您可能还应该在某个地方将您的本机库与MyLib链接起来。我刚刚找到了从ndk复制
libc++\u shared.so
的解决方案,将其放置在MyLib.a旁边,并以与我的库相同的方式进行链接。现在没有错误。但我不知道为什么需要这个。无论如何,感谢您抽出时间@Botje
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} )