Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
如何有选择地使用使用相同代码但使用不同编译器标志编译的多个库 LBCys),它将被用于另一个C++库(比如 LIbCudio)。我们正在使用androidndk(使用clang)和CMake_C++_Cmake_Android Ndk_Compiler Optimization - Fatal编程技术网

如何有选择地使用使用相同代码但使用不同编译器标志编译的多个库 LBCys),它将被用于另一个C++库(比如 LIbCudio)。我们正在使用androidndk(使用clang)和CMake

如何有选择地使用使用相同代码但使用不同编译器标志编译的多个库 LBCys),它将被用于另一个C++库(比如 LIbCudio)。我们正在使用androidndk(使用clang)和CMake,c++,cmake,android-ndk,compiler-optimization,C++,Cmake,Android Ndk,Compiler Optimization,在我们的例子中,我们有多个基于目标设备上可用的cpu功能优化的libCore版本。例如,对于具有ARM neon fpu的设备,libCore neon,对于没有neon的设备,libCore simd 顺便说一下,这些libCore xxxx是从相同的源代码构建的。唯一的区别是,libCore-neon是使用特定于neon的编译器标志(-mfpu=neon)构建的,它不用于libCore-simd 现在,libClient应在运行时检查设备是否有NEON,并使用libCore NEON,如果没

在我们的例子中,我们有多个基于目标设备上可用的cpu功能优化的
libCore
版本。例如,对于具有ARM neon fpu的设备,
libCore neon
,对于没有neon的设备,
libCore simd

顺便说一下,这些libCore xxxx是从相同的源代码构建的。唯一的区别是,
libCore-neon
是使用特定于neon的编译器标志(
-mfpu=neon
)构建的,它不用于
libCore-simd

现在,
libClient
应在运行时检查设备是否有NEON,并使用
libCore NEON
,如果没有,则应使用
libCore simd

一种解决方案是在运行时使用
dlopen
加载库。我们不喜欢它,因为我们不认为在所有版本的android中使用它是安全的

所有这些都属于相同的代码库。这些库是静态的还是共享的并不重要。这些甚至不需要是单独的库。我们只是想避免代码重复,因为相同的代码是用不同的标志编译的


有没有其他方法可以让我们在适当的设备上运行最优化的代码?

你可以在安装时而不是运行时检查应用程序,并确保预先安装了正确的版本?Android不提供此选项。我们只能根据体系结构(armeabi_v7a、x86)进行打包,而不能根据cpu特性进行打包。但是,我很想知道我们在安装时如何做到这一点。我的建议是:你基本上创建了两个单独的“应用程序”,其中“在任何硬件上运行”版本是应用程序的基本名称,并且你有一个单独的“应用程序令人敬畏的硬件”包,使用正确的硬件的用户可以下载和安装。谢谢你的建议。我认为这是一个典型的C++情况,那里有一个标准的解决方案。