2016-10-29 11 views
0

OS X(基本的にはバンドル/ DyLib)でPhotoshopプラグインを作成しています。
私はインテル®コンパイラーを使用しており、OpenMP(libiomp5)とリンクしてOpenMPを使用しています。
静的リンクを使用すると、Photoshopがクラッシュします(WindowsではOS X上でのみ動作します)。
私はダイナミックリンクを試みました。プラグイン(Bundle/DyLib)の検索パスを設定する

ホストであるPhotoshopは、そのフレームワークフォルダにあるlibiomp5.dylibを単独で使用します。
Xcodeでは、リンク先の部品をRunpath Search Pathsから@executable_path/../Frameworks/に設定しましたが、Photoshopで読み込もうとすると機能しません。
Runpath Search PathsIntel Run Time Redistributable Libraries(Photoshopのフレームワークライブラリと同じように、プラグインに必要なすべてのDyLibがMacDependencyに設定されています)を設定しようとしましたが、それでも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 

場合私はRunpath Search PathsIntel Run Time Redistributable Librariesに設定しました。適切なパスも表示されますが、結果は同じです。

誰でも私を助けることができますか?
私は経験豊富な開発者ではありませんので、ステップバイステップは素晴らしいでしょう。

+0

リファレンス - http://qin.laya.com/tech_coding_help/dylib_linking.html – Royi

+0

リファレンス - http://stackoverflow.com/questions/33991581/install-name-tool-to-update -a-executable-to-dylib-in-mac-os-x – Royi

+0

リファレンス - http://thecourtsofchaos.com/2013/09/16/how-to-copy-and-relink-binaries-on -osx/ – Royi

答えて

2

あなたの解決策は、@rpathを認識している現代のライブラリにとって正しいものです。 OpenMPライブラリはコンパイラのバージョン16.0の更新を開始する@rpathをサポートしています。あなたのRPATH設定はシステムによって無視されます

Photoshopからopenmpライブラリとリンクしようとすることはできますか?私は彼らがこれを回避し、install_nameをlibiomp5.dylibから "@executable_path /../Frameworks/libiomp5.dylib"に更新したと理解しています。あなたはそのライブラリにリンクしている場合におけるOpenMPの名前が

  1. Photoshopの更新が名前をインストールした場合、出力は/../ @executable_pathフレームワーク/ libiomp5.dylib

    いくつかのヒントに変更されます「-Lコマンドotool」 install_name_tool経由

    $ 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) 
    
  2. 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

関連する問題