如何有选择地使用使用相同代码但使用不同编译器标志编译的多个库 LBCys),它将被用于另一个C++库(比如 LIbCudio)。我们正在使用androidndk(使用clang)和CMake
在我们的例子中,我们有多个基于目标设备上可用的cpu功能优化的如何有选择地使用使用相同代码但使用不同编译器标志编译的多个库 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,如果没
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++情况,那里有一个标准的解决方案。