Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio CMake链接库失败 我有Android Studio本地C++项目,它有本地LIB。在里面,我使用的是其他静态C++库。库链接正常,但我在链接C共享库C:\user…\libnative lib时出错。因此_Android_C++_C_Cmake_Android Ndk - Fatal编程技术网

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} )