如何使用Cargo使链接器生成映射文件

Dav*_*nds 5 linker rust rust-cargo

我正在编写一个针对使用锌的STM32F407处理器的Rust程序.我希望能够生成链接器映射文件.我发现我可以将以下内容放在我的主菜中,这给了我想要的结果:

#![feature(link_args)]
#[link_args = "-Wl,-Map=blink_stm32f4.map"]
extern {}
Run Code Online (Sandbox Code Playgroud)

但是,文档link_args建议不要使用此方法.

还有哪些方法可以让链接器生成映射文件?

fgh*_*ghj 7

link-args可以传递到rustcvia rustc -C link-args="-Wl,-Map=blink_stm32f4.map" test.rs。

并且有cargo rustflagsinbuild部分的选项。请参阅货物配置。它的工作原理如下:

$ cargo new --bin testbin
$ cd testbin
$ cat .cargo/config 
[build]
rustflags = ["-Clink-args=-Wl,-Map=/tmp/blink_f7.map"]
$ cargo build
Run Code Online (Sandbox Code Playgroud)

linkerconfig中也有选项cargo。我不会尝试通过此选项gccplus flags, only传递gcc,但您可以编写gcc包装器脚本,例如:

$ cat my-linker.sh
#!/bin/sh

arm-...-gcc -Wl,-Map=blink_stm32f4.map $@
Run Code Online (Sandbox Code Playgroud)