2015-02-05 189 views
2

我所试图做的事:的OpenMP支持iOS/Android的兼容性

我的工作C/C++代码建立适用于所有平台(产品我OS /安卓/ Windows的(移动/桌面)/ MAC/Linux的

有我迄今所做的是什么:

是有谈论的OpenMP与不同的处理器和操作系统的兼容性网上很多环节,但很难从中得出合理的结论,因为很多文章或帖子都是针对移动目标的。

编号:Link

按我的分析,是的,的OpenMP可以与所有桌面 OS的(Windows/Mac的/ Linux的),几乎所有的电脑工作有多核处理器现在。所以根本不会有任何问题。

任何人都可以帮助我找到以下答案吗?

  1. 是否与苹果设备(新iPad/iPhone的)OpenMP的工作?如果是,是否有任何与OpenMP不兼容的特定设备?似乎OpenMP在IOS中是活跃的,直到Xcode 4.4。但是,在最新版本的xcode中,我无法看到OpenMP的任何选项。例如:Link

  2. 我希望所有更高端的安卓手机有超过1个内核和基于ARM的。根据我的观点,openMp应该在NDK构建的帮助下与Android平台一起工作。我的理解是否正确?

+0

是否有IOS任何输入? – 2vision2

回答

3

我无法回答1,因为我没有任何ios设备和开发环境。

关于2.是的,所有高端的android设备都有超过1个内核。实际上很难找到一款只有1核心的低端Android设备。但并非所有的Android设备都是基于ARM的,还有双核和四核x86和x86_64设备以及arm64-v8a设备。

NDK支持所有这些体系结构,自第9版以来也支持openmp。使用GCC(这是默认的编译器),并在Android.mk Makefile中添加-fopenmp到您的NDK模块的CFLAGS和LDFLAGS:

include $(CLEAR_VARS) 
LOCAL_MODULE := yourmodule 
LOCAL_SRC_FILES := yourmodule.c 
LOCAL_CFLAGS += -fopenmp 
LOCAL_LDFLAGS += -fopenmp 
include $(BUILD_SHARED_LIBRARY) 
+0

是否可以使用GCC(ubuntu)构建android共享库(.so)?它是否进行交叉编译? – 2vision2

+0

不,为了做交叉编译,你应该直接使用ndk工具链,而不是你自己的gcc。他们将为所有支持的平台进行适当的交叉编译和链接。关于使用ndk(没有glibc ...)有很多细节,你可以先阅读安装包中的文档。 – ph0b