如何在Xcode中正确链接libomp动态库?

问题描述 投票:0回答:1
我正在编写一个 OpenMP C 程序(它可以只是一条

omp_set_num_threads(x)

 指令)。我可以使用命令 
clang -Xclang -fopenmp -L/opt/homebrew/opt/libomp/lib -I/opt/homebrew/opt/libomp/include -lomp main.c
 在终端中构建并执行它。

我想做的是在Xcode中以同样的方式编译和运行。所以,我做了以下事情。

在我的“目标”的“构建设置”中,我添加了:

    “其他 C 标志”项目:
  • -Xclang
    -fopenmp
    
    
  • “标题搜索路径”项:
  • /opt/homebrew/opt/libomp/include
    
    
  • “库搜索路径”项目:
  • /opt/homebrew/opt/libomp/lib
    
    
  • “其他链接器标志”项目:
  • -lomp
    
    
构建成功,但是当程序运行时,它会在调试模式下停止,并给出一个名为“0 __abort_with_payload”的新选项卡,其中包含:

dyld`__abort_with_payload: 0x19ec54620 <+0>: mov x16, #0x209 ; =521 0x19ec54624 <+4>: svc #0x80 -> 0x19ec54628 <+8>: b.lo 0x19ec54648 ; <+40> Thread 1: signal SIGABRT 0x19ec5462c <+12>: pacibsp 0x19ec54630 <+16>: stp x29, x30, [sp, #-0x10]! 0x19ec54634 <+20>: mov x29, sp 0x19ec54638 <+24>: bl 0x19ebece60 ; cerror_nocancel 0x19ec5463c <+28>: mov sp, x29 0x19ec54640 <+32>: ldp x29, x30, [sp], #0x10 0x19ec54644 <+36>: retab 0x19ec54648 <+40>: ret
然后,我还尝试输入:

,而不是“其他链接器标志”中的

-lomp

    静态库路径:
  • /opt/homebrew/opt/libomp/lib/libomp.a
    。应用程序已构建并成功运行。
  • 动态库路径:
  • /opt/homebrew/opt/libomp/lib/libomp.dylib
    。行为与我输入时相同 
    -lomp
如何正确设置动态库?

c xcode linker openmp
1个回答
0
投票
我终于抓住了。

可以按照我在问题中所述自由加载动态库。当涉及到

0 __abort_with_payload point

 时,通过在“签名和功能”下的项目设置(选择 .xcodeproj 文件)中既没有“应用程序沙箱”也没有“强化运行时”来解决问题。
通过拥有 
<projectname>.entitlements
 文件也可以实现同样的目的。

© www.soinside.com 2019 - 2024. All rights reserved.