Rust no_std找到为什么需要全局内存分配器



我正在为一个不支持std或alloc的平台编写Rust代码,所以我必须只使用core。最近,我的代码开始产生以下编译错误:

error: no global memory allocator found but one is required; link to std or add `#[global_allocator]` to a static item that implements the GlobalAlloc trait
error: `#[alloc_error_handler]` function required, but not found

是否有一种方法可以让rust编译器告诉我为什么需要全局内存分配器?据推测,在我的代码或我的依赖关系的某个地方,有些东西试图分配,这导致它出错,但我不能弄清楚这是在哪里发生的。

这种情况的唯一建议我看到网上是虚拟定制分配器,然后查看引用的编译后的二进制文件。但是,我这样做了,并且无法在它生成的二进制可执行文件中找到任何对我的自定义分配器的引用,这使我对发生的事情更加困惑。

对于我来说,使用cargo vendor将所有依赖项的源代码下载到本地目录中是有效的,然后我使用ripgrep搜索extern crate alloc;的依赖项,这导致我在不知情的情况下分配了一个依赖项。我不知道为什么分配没有显示在最终的二进制文件中,但是这个工具比实现一个虚拟分配器更好地引导我找到原因。

最新更新