Xcode 设置插件(Bundle/DyLib)的搜索路径
我正在OSX上创建一个Photoshop插件(基本上是一个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
我正在使用英特尔编译器,并通过链接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
--弗拉基米尔参考-参考-参考-参考-参考-参考-参考-参考-参考-