Xcode 设置插件(Bundle/DyLib)的搜索路径

Xcode 设置插件(Bundle/DyLib)的搜索路径,xcode,macos,openmp,dylib,icc,Xcode,Macos,Openmp,Dylib,Icc,我正在OSX上创建一个Photoshop插件(基本上是一个Bundle/DyLib)。 我正在使用英特尔编译器,并通过链接OpenMP(libiomp5)来使用OpenMP。 当我使用静态链接时,它会使Photoshop崩溃(只有在OS X上,在Windows上才有效)。 所以我尝试了动态链接 主机Photoshop自己使用libiomp5.dylib,该文件可在其框架文件夹中找到。 因此,在Xcode上,我在链接部分设置了运行路径搜索路径到@executable\u path/./Framew

我正在OSX上创建一个Photoshop插件(基本上是一个Bundle/DyLib)。
我正在使用英特尔编译器,并通过链接OpenMP(
libiomp5
)来使用OpenMP。
当我使用静态链接时,它会使Photoshop崩溃(只有在OS X上,在Windows上才有效)。
所以我尝试了动态链接

主机Photoshop自己使用
libiomp5.dylib
,该文件可在其框架文件夹中找到。
因此,在Xcode上,我在链接部分设置了
运行路径搜索路径
@executable\u path/./Frameworks/
,但当我尝试在Photoshop上加载它时,它不会工作。
我还尝试将运行路径搜索路径设置为(包括插件所需的所有动态库,就像Photoshop的框架库一样),但它仍然无法加载到Photoshop上

当我在插件上使用otool-L时,我得到:

/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 157.0.0)
    libimf.dylib (compatibility version 0.0.0, current version 0.0.0)
    libsvml.dylib (compatibility version 0.0.0, current version 0.0.0)
    libirng.dylib (compatibility version 0.0.0, current version 0.0.0)
    libiomp5.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
    libintlc.dylib (compatibility version 1.0.0, current version 1.13.0)
    /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 62.0.0)
当我在插件上尝试
otool-l
时,我确实看到了我在Xcode中插入的内容:

Load command 6
     cmd LC_UUID
 cmdsize 24
    uuid B61F2961-AD6D-30B9-AF58-C67689731966
Load command 7
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.7
      sdk 10.10
Load command 8
          cmd LC_LOAD_DYLIB
      cmdsize 88
         name /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 157.0.0
compatibility version 2.0.0
Load command 9
          cmd LC_LOAD_DYLIB
      cmdsize 40
         name libimf.dylib (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 0.0.0
compatibility version 0.0.0
Load command 10
          cmd LC_LOAD_DYLIB
      cmdsize 40
         name libsvml.dylib (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 0.0.0
compatibility version 0.0.0
Load command 11
          cmd LC_LOAD_DYLIB
      cmdsize 40
         name libirng.dylib (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 0.0.0
compatibility version 0.0.0
Load command 12
          cmd LC_LOAD_DYLIB
      cmdsize 40
         name libiomp5.dylib (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 5.0.0
compatibility version 5.0.0
Load command 13
          cmd LC_LOAD_DYLIB
      cmdsize 48
         name /usr/lib/libc++.1.dylib (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 120.0.0
compatibility version 1.0.0
Load command 14
          cmd LC_LOAD_DYLIB
      cmdsize 56
         name /usr/lib/libSystem.B.dylib (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 1213.0.0
compatibility version 1.0.0
Load command 15
          cmd LC_LOAD_DYLIB
      cmdsize 40
         name libintlc.dylib (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 1.13.0
compatibility version 1.0.0
Load command 16
          cmd LC_LOAD_DYLIB
      cmdsize 104
         name /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (offset 24)
   time stamp 2 Thu Jan  1 02:00:02 1970
      current version 62.0.0
compatibility version 1.0.0
Load command 17
          cmd LC_RPATH
      cmdsize 48
         path @executable_path/../Frameworks/ (offset 12)
Load command 18
      cmd LC_FUNCTION_STARTS
  cmdsize 16
  dataoff 3486976
 datasize 5616
Load command 19
      cmd LC_DATA_IN_CODE
  cmdsize 16
  dataoff 3492592
 datasize 0
如果我将
运行路径搜索路径设置为
,我也会看到正确的路径,但结果是相同的

有人能帮我吗?

我不是一个很有经验的开发人员,所以,一步一步地做就好了。

您的解决方案对于了解@rpath的现代库来说是正确的。OpenMP库支持@rpath启动编译器版本16.0更新2。在您的情况下,系统将忽略您的RPATH设置

您可以尝试从photoshop链接到with openmp库吗?据我所知,他们对此做了变通,并将install_name从libiomp5.dylib更新为“@executable_path/./Frameworks/libiomp5.dylib”。因此,如果链接到该库,“otool-l”输出中的openmp名称将更改为@executable_path/。/Frameworks/libiomp5.dylib

一些提示

  • 如果photoshop通过安装工具更新安装名称

     $ otool -l ./a.out | grep omp
     name libiomp5.dylib (offset 24)
     # libiomp5.dylib was copied to the location with test 
     $ install_name_tool -id "@executable_path/../Frameworks/libiomp5.dylib" libiomp5.dylib
     $ LIBRARY_PATH=.:$LIBRARY_PATH icc -openmp test1.cpp 
     $ otool -l ./a.out | grep omp
     name @executable_path/../Frameworks/libiomp5.dylib (offset 24)
    
  • RPATH使用

    install_name_tool -id "@executable_path/../Frameworks/libiomp5.dylib" libiomp5.dylib
    $ LIBRARY_PATH=.:$LIBRARY_PATH icc -openmp test1.cpp -Wl,-rpath,.
    $ ./a.out
    dyld: Library not loaded: @executable_path/../Frameworks/libiomp5.dylib
      Referenced from: /nfs/inn/home/vpolin/mac/./a.out
      Reason: image not found
    Trace/BPT trap: 5
    $ install_name_tool -id "@rpath/libiomp5.dylib" libiomp5.dylib
    $ LIBRARY_PATH=.:$LIBRARY_PATH icc -openmp test1.cpp -Wl,-rpath,.
    $ otool -l ./a.out | grep omp
             name @rpath/libiomp5.dylib (offset 24)
    $ ./a.out
    4 8 8 8 8
    

  • --Vladimir

    您的解决方案对于了解@rpath的现代库来说是正确的。OpenMP库支持@rpath启动编译器版本16.0更新2。在您的情况下,系统将忽略您的RPATH设置

    您可以尝试从photoshop链接到with openmp库吗?据我所知,他们对此做了变通,并将install_name从libiomp5.dylib更新为“@executable_path/./Frameworks/libiomp5.dylib”。因此,如果链接到该库,“otool-l”输出中的openmp名称将更改为@executable_path/。/Frameworks/libiomp5.dylib

    一些提示

  • 如果photoshop通过安装工具更新安装名称

     $ otool -l ./a.out | grep omp
     name libiomp5.dylib (offset 24)
     # libiomp5.dylib was copied to the location with test 
     $ install_name_tool -id "@executable_path/../Frameworks/libiomp5.dylib" libiomp5.dylib
     $ LIBRARY_PATH=.:$LIBRARY_PATH icc -openmp test1.cpp 
     $ otool -l ./a.out | grep omp
     name @executable_path/../Frameworks/libiomp5.dylib (offset 24)
    
  • RPATH使用

    install_name_tool -id "@executable_path/../Frameworks/libiomp5.dylib" libiomp5.dylib
    $ LIBRARY_PATH=.:$LIBRARY_PATH icc -openmp test1.cpp -Wl,-rpath,.
    $ ./a.out
    dyld: Library not loaded: @executable_path/../Frameworks/libiomp5.dylib
      Referenced from: /nfs/inn/home/vpolin/mac/./a.out
      Reason: image not found
    Trace/BPT trap: 5
    $ install_name_tool -id "@rpath/libiomp5.dylib" libiomp5.dylib
    $ LIBRARY_PATH=.:$LIBRARY_PATH icc -openmp test1.cpp -Wl,-rpath,.
    $ otool -l ./a.out | grep omp
             name @rpath/libiomp5.dylib (offset 24)
    $ ./a.out
    4 8 8 8 8
    
  • --弗拉基米尔

    参考-参考-参考-参考-参考-参考-参考-参考-参考-