如何知道哪个库使用给定的符号?

How to know which library uses a given symbol?

Js_of_ocaml 告诉我我的字节码在某处使用了 caml_blit_string_to_bigstring。有没有办法找到哪个库引入了这个依赖?

我使用 ocamlobjinfo 成功地将 caml_blit_string_to_bigstring 发现 cstruct.cma。

使用opam list --depends-on=...,我发现Hex使用Cstruct,Ezjsonm使用Hex,Cow使用Ezjsonm。

现在我不确定是否是我使用的 Ezjsonm 代码触发了崩溃。

编辑 我固定了一个不依赖于 cstruct 的自定义版本的 Hex。现在问题解决了。

你可以试试这个:

cd $(opam config var lib)
ocamlobjinfo */*.cmo */*.cmx */*.cma */.cmxa | less 

然后搜索您的符号,一旦找到它,向上移动以找出符号出现的 File 行。

这也可能在 sub-sub+ 文件夹中,但我是一个糟糕的 shell 脚本程序员所以我会让你找出正确的调用。