如何有选择地使用使用相同代码但使用不同编译器标志编译的多个库

时间:2018-06-12 14:28:04

标签: c++ cmake android-ndk compiler-optimization

我们正在构建一个将从另一个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中使用它是安全的方法。

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

我们可以遵循其他方法在适当的设备上运行最优化的代码吗?

0 个答案:

没有答案