2016-10-29 8 views
0

OS X (기본적으로 번들/DyLib)에서 포토샵 플러그인을 만들고 있습니다.
저는 인텔 컴파일러를 사용 중이며 OpenMP (libiomp5)와 연결하여 OpenMP를 사용합니다.
정적 링크를 사용하면 Photoshop이 충돌합니다 (Windows OS X에서만 작동).
그래서 동적 연결을 시도했습니다.플러그인 검색 경로 설정 (번들/DyLib)

호스트 인 Photoshop은 자신의 프레임 워크 폴더에있는 libiomp5.dylib을 사용합니다.
그래서 Xcode에서 링크 파트를 Runpath Search Paths에서 @executable_path/../Frameworks/으로 설정했지만 포토샵에서로드하려고하면 작동하지 않습니다.
Runpath Search PathsIntel Run Time Redistributable Libraries (Photoshop의 프레임 워크 라이브러리와 마찬가지로 MacDependency에 따라 플러그 인에 필요한 모든 DyLib가 포함되어 있음)으로 설정하려고했으나 여전히 Photoshop에는로드되지 않습니다. 내가 otool -L가 플러그에에 사용하는 경우

, 내가 얻을 :

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 

경우 : 나는 내가 엑스 코드에 삽입하는 것을 볼 않는 플러그에 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) 

나는 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 업데이트 2를 시작하는 @rpath를 지원합니다. RPATH 설정은 시스템에 의해 무시됩니다.

포토샵에서 openmp 라이브러리와 연결을 시도 할 수 있습니까? 나는 그들이 이것을 해결하고 libiomp5.dylib에서 "@executable_path /../ Frameworks/libiomp5.dylib"로 install_name을 업데이트했다는 것을 이해합니다. 그래서 당신은 그 라이브러리에 링크하는 경우에 OpenMP의 이름은

  1. 포토샵 업데이트 이름을 설치하는 경우 출력은 /../ @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