2017-08-02 59 views
1

我一直无法弄清楚为什么我的二进制文件没有加载。它是一个由MATLAB(MEX文件)加载的dylib,并链接到不同位置的不少dylib。 MATLAB告诉我它无法加载MEX文件,但我无法弄清楚它无法找到哪些依赖关系。MacOSX:哪些动态库通过二进制链接?

有没有人有任何建议如何调试这样的事情?

在Linux上,ldd是调试此问题的最佳工具。人们一直在说otool -L是与Linux ldd等价的MacOS,但事实并非如此。 ldd实际上是查找库,并告诉你哪些可以找到,以及它们在哪里找到。 otool -L只告诉你什么库需要链接。它不检查是否在那里。它甚至没有告诉你在什么时候使用@rpath来搜索库。

otool -l(小写的L)为您提供了“负载命令”转储,那里你可以看到LC_RPATH命令,建立在那里@rpath库中搜索。但是这些都无法向我解释哪些依赖没有找到。

回答

1

尝试运行MATLAB之前设置这些环境变量:

export DYLD_PRINT_LIBRARIES=1 
export DYLD_PRINT_LIBRARIES_POST_LAUNCH=1 
export DYLD_PRINT_RPATHS=1 

运行man dyld了更多的可能性。

您还可以设置变量就是这样的MATLAB命令:

DYLD_PRINT_LIBRARIES=1 DYLD_PRINT_LIBRARIES_POST_LAUNCH=1 DYLD_PRINT_RPATHS=1 matlab 
+0

这是优秀的,太感谢你了! Matlab有一个启动脚本,似乎不会将环境变量传递给可执行文件,所以我将这些变量添加到脚本中。我也使用了'DYLD_PRINT_TO_FILE'。 –