2017-08-02 91 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'。 –