最好的方法来定位共享库(. dylib)在MacOS X MATLAB墨西哥人所使用的文件

43岁的观点(30天)
我用MATLAB在MacOS X系统上,和建筑墨西哥人文件。这些墨西哥人文件依赖于各种共享库(. dylib),我一直在与墨西哥人文件相同的目录中。
MacOS X的旧版本,为了找到这些共享库在MATLAB运行时,它是足以有DYLD_LIBRARY_PATH设置环境变量包括目录名称。变量可以设置开始前MATLAB或通过设置在MATLAB脚本的副本。无论哪种方式,只要DYLD_LIBRARY_PATH将包括位置开始前MATLAB或通过MATLAB脚本的副本包括一行设置DYLD_LIBRARY_PATH正确,墨西哥人文件将正常工作。如果环境变量没有设置正确,MATLAB就发出错误消息说dylibs不能被发现。
但是,在最新版本的MacOS X(或者,也许,这是最近最近MacOS X结合MATLAB -我不确定)不再这工作——DYLD_LIBRARY_PATH被忽视,和墨西哥人文件失败,我猜是因为苹果的加强了安全策略。
什么工作是确保MATLAB的当前工作目录的目录包含文件和dylibs墨西哥人在使用第一次的墨西哥人文件。之后,你仍然可以改变目录和墨西哥人文件的工作。当你这样做时没有必要担心DYLD_LIBRARY_PATH。大概一旦dylibs被装载在这种方式,他们不再保持加载,需要在你的路径。据我所知,这适用于所有版本的MATLAB从至少R2015b R2017b和MacOS版本到最新的访问,这是MacOS X 10.12(山脉)。
所以——当我我的墨西哥人文件分发给其他人,我只需要告诉他们,他们需要在正确的目录在他们第一次使用其中的一个(或添加代码来创业。m文件为他们这样做)。事实上,我没有发现任何其他方式得到它的工作。
我的问题是,这是一个明智的方式确保dylibs在MacOS位于墨西哥人所需要的文件?如果没有,推荐的方法是什么?
4评论
米克
米克 2017年10月11日
你是对的,用户安装/应用程序不应该受到影响,所以目前还不清楚这是怎么回事;然而,我试着把符号链接放在/usr/local/lib,它确实工作。我不会使用这种方法的原因之前我给,但如果这种方法给出了一个答案那么它可能有利于他人

登录置评。

答案(1)

吉姆Hokanson
吉姆Hokanson 2018年3月7日
编辑:吉姆Hokanson 2022年11月26日
我有一些运气与以下命令在我的墨西哥人文件相同的目录中。
install_name_tool改改/用户/吉姆/文件/回购/ matlab_git / mex_lib_code / zip / libzip。dylib @loader_path / libzip。dylib kzip_mex.mexmaci64
或更一般的:
install_name_tool改改< old_dylib_path > @loader_path / < dylib_file_name > < mex_file_name >
第一个值,运行:
otool- l kzip_mex.mexmaci64
这应该报告dylibs正在加载。使用这些值作为第一个输入。
第二个输入,在我的例子中 @loader_path / libzip.dylib ,应该换成dylib名称,保持@loader_path部分。
最后,第三个输入指定文件应该针对这种变化。你的墨西哥人文件的名称。
重新运行otool命令,现在您应该看到dylib的路径改变了……
添加东西,是因为我不能按照自己的方向! ! !
额外的注意,您需要确切地匹配第一个输入从otool,这不一定是动态库的路径。
例如我跑这个在我的文件:
otool- l libgit.mexmaci64
和有:
libgit2。dylib(compatibility version 26.0.0, current version 0.26.0)
@rpath / libmx。dylib(compatibility version 0.0.0, current version 0.0.0)
@rpath / libmex。dylib(compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc + +。1。dylib(compatibility version 1.0.0, current version 1300.23.0)
/usr/lib/libSystem.B。dylib(compatibility version 1.0.0, current version 1311.100.3
但我希望libgit2。dylibto not just be generically loaded, but to load in the SAME directory as my libgit.mexmaci64 file. So that change is:
install_name_tool改改libgit2。dylib@loader_path / libgit2。dyliblibgit.mexmaci64
再次运行otool:
otool- l libgit.mexmaci64
我得到:
@loader_path / libgit2。dylib(compatibility version 26.0.0, current version 0.26.0)
@rpath / libmx。dylib(compatibility version 0.0.0, current version 0.0.0)
@rpath / libmex。dylib(compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc + +。1。dylib(compatibility version 1.0.0, current version 1300.23.0)
/usr/lib/libSystem.B。dylib(compatibility version 1.0.0, current version 1311.100.3)
这条目已经成功地从旧的值更改为新的值
注意,@loader_path是相对于你的墨西哥人文件。如果你保持dylib文件在一个文件夹你会使用类似@loader_path / my_sub_folder / mylib.dylib
2的评论
吉姆Hokanson
吉姆Hokanson 2018年9月2日
我认为这将是几乎相同的过程,只是取代mexmaci64图书馆你= > my_library加载。dylib my_library.mexmaci64(而不是)。注意在这种情况下,你的目标仍然是找到你正在与动态库的依赖关系(墨西哥人或dylib)和那些指向一个本地副本。

登录置评。

类别

找到更多的在策略和逻辑帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!