我无法弄清楚为什么我的二进制文件无法加载。它是MATLAB加载的dylib(MEX文件),并链接到位于不同位置的许多dylib。MATLAB告诉我它无法加载MEX文件,但是我无法弄清它找不到哪个依赖项。
有人对如何调试这样的东西有任何建议吗?
在Linux上,ldd
是调试此问题的理想工具。人们一直说otool -L
MacOS与Linux等效ldd
,但这不是事实。ldd
实际上会查找这些库,并告诉您可以找到哪些库以及在何处找到它们。otool -L
仅告诉您需要链接的库。无需检查它们是否存在。它甚至没有告诉您使用库时在哪里搜索库@rpath
。
otool -l
(小写的L)为您提供了“加载命令”的转储,您可以在LC_RPATH
其中看到这些命令,这些命令确定了在何处@rpath
搜索库。但是这些无法向我解释未找到哪个依赖项。
我有一个 ELF 文件,我想从中获取我的代码的hex
或文件。bin
在终端中,如果 a do a file main
,这是我的文件,它会显示:
main: ELF 32-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, not stripped
Run Code Online (Sandbox Code Playgroud)
据我所知,objdump
在 macOS 上不起作用,并且otool -l main
出现以下错误:
llvm-objdump: 'main': Object is not a Mach-O file type.
Run Code Online (Sandbox Code Playgroud)
ELF 文件是使用以下命令创建的:
riscv-none-gcc/8.2.0-2.1-20190425-1021/bin/riscv-none-embed-gcc --specs=nosys.specs main.c -o main
Run Code Online (Sandbox Code Playgroud)
那么有没有办法做到呢?
多谢