如何让链接器使用 Cargo 生成映射文件
How to get the linker to produce a map file using Cargo
我正在使用 zinc 编写针对 STM32F407 处理器的 Rust 程序。我希望能够生成链接器映射文件。我发现我可以在我的 main.rs 中放入以下内容,这给了我想要的结果:
#![feature(link_args)]
#[link_args = "-Wl,-Map=blink_stm32f4.map"]
extern {}
但是,the documentation for link_args
建议不要使用这种方法。
还有哪些其他方法可以让链接器生成映射文件?
link-args
可以通过 rustc -C link-args="-Wl,-Map=blink_stm32f4.map" test.rs
.
传递给 rustc
并且build
部分有cargo
rustflags
选项。参见 cargo config。它是这样工作的:
$ cargo new --bin testbin
$ cd testbin
$ cat .cargo/config
[build]
rustflags = ["-Clink-args=-Wl,-Map=/tmp/blink_f7.map"]
$ cargo build
cargo
配置中还有 linker
选项。我不试图通过
此选项 gcc
加 flags
,仅 gcc
,但您可以编写 gcc
包装脚本,如:
$ cat my-linker.sh
#!/bin/sh
arm-...-gcc -Wl,-Map=blink_stm32f4.map $@
我试图在 .cargo/config
中添加这样的内容:
[build]
rustflags = ["-Clink-args=-Wl,-Map=/tmp/app.map"]
但是我得到了错误:
rust-lld: error: unknown argument '-Wl,-Map=/tmp/app.map'
根据this blog,我将其更改为:
后有效
[build]
rustflags = ["-Clink-args=-Map=/tmp/app.map"]
我正在使用 zinc 编写针对 STM32F407 处理器的 Rust 程序。我希望能够生成链接器映射文件。我发现我可以在我的 main.rs 中放入以下内容,这给了我想要的结果:
#![feature(link_args)]
#[link_args = "-Wl,-Map=blink_stm32f4.map"]
extern {}
但是,the documentation for link_args
建议不要使用这种方法。
还有哪些其他方法可以让链接器生成映射文件?
link-args
可以通过 rustc -C link-args="-Wl,-Map=blink_stm32f4.map" test.rs
.
rustc
并且build
部分有cargo
rustflags
选项。参见 cargo config。它是这样工作的:
$ cargo new --bin testbin
$ cd testbin
$ cat .cargo/config
[build]
rustflags = ["-Clink-args=-Wl,-Map=/tmp/blink_f7.map"]
$ cargo build
cargo
配置中还有 linker
选项。我不试图通过
此选项 gcc
加 flags
,仅 gcc
,但您可以编写 gcc
包装脚本,如:
$ cat my-linker.sh
#!/bin/sh
arm-...-gcc -Wl,-Map=blink_stm32f4.map $@
我试图在 .cargo/config
中添加这样的内容:
[build]
rustflags = ["-Clink-args=-Wl,-Map=/tmp/app.map"]
但是我得到了错误:
rust-lld: error: unknown argument '-Wl,-Map=/tmp/app.map'
根据this blog,我将其更改为:
后有效[build]
rustflags = ["-Clink-args=-Map=/tmp/app.map"]