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

时间:2016-09-03 20:09:27

标签: linker rust rust-cargo

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

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

但是,the documentation for link_args建议不要使用此方法。

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

2 个答案:

答案 0 :(得分:4)

link-args可以通过rustc传递给rustc -C link-args="-Wl,-Map=blink_stm32f4.map" test.rs

cargo部分中有rustflags build选项。见cargo config。它的工作原理如下:

$ cargo new --bin testbin
$ cd testbin
$ cat .cargo/config 
[build]
rustflags = ["-Clink-args=-Wl,-Map=/tmp/blink_f7.map"]
$ cargo build

linker配置中还有cargo选项。我不想尝试通过 此选项gccflags,仅gcc,但您可以编写gcc包装脚本,如:

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

arm-...-gcc -Wl,-Map=blink_stm32f4.map $@

答案 1 :(得分:0)

我尝试在 .cargo/config 中添加类似的内容:

[build]
rustflags = ["-Clink-args=-Wl,-Map=/tmp/app.map"]

但是我遇到了错误:

<块引用>

rust-lld: 错误:未知参数 '-Wl,-Map=/tmp/app.map'

根据this blog,我把它改成:

[build]
rustflags = ["-Clink-args=-Map=/tmp/app.map"]