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就可以了。希望这个方法能帮助到大家

你可能感兴趣的:(学习,C++,ios)