我们正在构建一个将从另一个C ++库(例如libCore
)使用的C ++库(比如libClient
)。我们将Android NDK
(使用clang
)与CMake
一起使用。
在我们的案例中,我们根据目标设备上可用的cpu功能优化了libCore
的多个版本。例如,libCore-neon
表示具有ARM NEON fpu的设备,libCore-simd
表示没有NEON的设备。
顺便说一下,这些libCore-xxxx是用相同的源代码构建的。唯一的区别是libCore-neon
是使用不属于-mfpu=neon
的NEON特定编译器标志(libCore-simd
)构建的。
现在libClient
将检查设备是否在运行时具有NEON并使用libCore-neon
,否则它将使用libCore-simd
。
一种解决方案是使用dlopen
在运行时加载库。我们不喜欢它,因为我们不认为在所有版本的android中使用它是安全的方法。
所有这些都属于相同的代码库。这些库是静态的还是共享的并不重要。这些甚至不需要是单独的库。我们只是想避免代码重复,因为使用不同的标志编译相同的代码。
我们可以遵循其他方法在适当的设备上运行最优化的代码吗?