iOS编译openmp
Posted 周旭光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS编译openmp相关的知识,希望对你有一定的参考价值。
1、下载openmp源码
https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.6/openmp-14.0.6.src.tar.xz
2、下载ios.toolchain.cmake
https://github.com/leetal/ios-cmake/tree/4.3.0
源码根目录创建toolchains目录,将ios.toolchain.cmake放入toolchains目录
3、进入到源码目录,执行下列操作
sed -i'' -e '/.size __kmp_unnamed_critical_addr/d' runtime/src/z_Linux_asm.S
sed -i'' -e 's/__kmp_unnamed_critical_addr/___kmp_unnamed_critical_addr/g' runtime/src/z_Linux_asm.S
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \\
-DPLATFORM=OS64 -DENABLE_BITCODE=1 -DENABLE_ARC=0 -DENABLE_VISIBILITY=0 \\
-DPERL_EXECUTABLE=/usr/local/bin/perl \\
-DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF ..
cmake --build . -j 12
cmake --build . --target install
注意,编译模拟器的库使用下面的命令
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \\
-DPLATFORM=SIMULATOR64 -DENABLE_BITCODE=1 -DENABLE_ARC=0 -DENABLE_VISIBILITY=0 \\
-DPERL_EXECUTABLE=/usr/local/bin/perl \\
-DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF ..
4、编译后的产物放在build/install文件夹中
5、将真机的库和模拟器的库使用lipo工具合并,
lipo -create build_sim64/install/lib/libomp.a build_ios64/install/lib/libomp.a -output libomp.a
build_sim64/install/lib/libomp.a build_ios64/install/lib/libomp.a 分别是模拟器和真机的库,输出库的路径 -output libomp.a
lipo -info libomp.a验证
Architectures in the fat file: libomp.a are: x86_64 arm64 说明有两个架构就是OK的
6、工程中引用头文件,增加编译选项 -Xclang -fopenmp
iOS和mac上原生没有支持openmp,通过编译,就可以在iOS和mac上使用,mac上编译比较简单,直接cmake,然后make就可以了。希望这个方法能帮助到大家
以上是关于iOS编译openmp的主要内容,如果未能解决你的问题,请参考以下文章