2016-09-03 27 views
5

Piszę program Rust przeznaczony dla procesora STM32F407 przy użyciu cynku. Chciałbym móc stworzyć plik mapy linkera. Odkryłem, że mogę umieścić następujące w moich main.rs i to daje mi pożądany rezultat:Jak uzyskać linker do utworzenia pliku mapy przy użyciu Cargo

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

Jednak the documentation for link_args sugeruje, aby nie korzystać z tej metody.

Jakie istnieją inne metody uzyskania linkera do utworzenia pliku mapy?

Odpowiedz

3

link-args można przekazać do rustc przez rustc -C link-args="-Wl,-Map=blink_stm32f4.map" test.rs.

Istnieje również opcja cargo w sekcji build. Zobacz cargo config. To działa tak:

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

Ponadto istnieje opcja linker w cargo config. Nie staram się przekazać za pośrednictwem tę opcję gcc powiększonej flags, tylko gcc, ale można napisać skrypt otoki gcc jak:

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

arm-...-gcc -Wl,-Map=blink_stm32f4.map [email protected] 
+1

Próbowałem dodać: [build] rustflags = [ „-Wl , -map = blink_f7.map”] do mojego Cargo.toml pliku i otrzymuję następujące ostrzeżenie ostrzeżenie: nieużywany oczywisty klucz: build.rustflags Używam nightly-2016-05-24 zbudować. Wygląda na to, że wiele wskazówek, które znalazłem w wyszukiwarce Google, działa tylko na starszych wersjach rdzy/ładunku. –

+1

Mam skrypt mylinkko.sh do pracy - dziękuję. To powinno działać pod Linuxem i OS X. Buduję coś znacznie większego niż pojedynczy plik, więc nie jestem pewien w jaki sposób bezpośrednie wywołanie rustc pomoże. Muszę uwzględnić cynk i jego zależności w czasie połączenia. 1 z 3 wciąż postępuje. –

+1

@DaveHylands Zaktualizowałem swoją odpowiedź z opisem, jak używać 'cargo' config, przy okazji linker można również ustawić w' .cargo/config' i można ustawić go na inną wartość dla różnych architektur. – fghj

Powiązane problemy