2016-09-03 51 views
5

Tôi đang viết chương trình Rust được nhắm mục tiêu cho bộ xử lý STM32F407 sử dụng kẽm. Tôi muốn có thể tạo ra một tệp bản đồ liên kết. Tôi đã phát hiện ra rằng tôi có thể đặt sau trong main.rs tôi và điều này mang lại cho tôi những kết quả mong muốn:Cách để trình liên kết tạo ra một tệp bản đồ bằng cách sử dụng hàng hóa

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

Tuy nhiên, the documentation for link_args gợi ý không sử dụng phương pháp này.

Phương pháp nào khác tồn tại để làm cho trình liên kết tạo ra một tệp bản đồ?

Trả lời

3

link-args có thể chuyển đến rustc qua rustc -C link-args="-Wl,-Map=blink_stm32f4.map" test.rs.

Và có tùy chọn cargorustflags trong mục build. Xem cargo config. Nó hoạt động như thế này:

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

Cũng có linker tùy chọn trong cargo config. Tôi không cố gắng để vượt qua qua tùy chọn này gcc cộng flags, chỉ gcc, nhưng bạn có thể viết gcc wrapper kịch bản như:

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

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

Tôi cố gắng thêm: [xây dựng] rustflags = [ "-Wl , -map = blink_f7.map"] đến file Cargo.toml tôi và tôi nhận được như sau cảnh báo cảnh báo: không sử dụng chìa khóa manifest: build.rustflags tôi đang sử dụng hàng đêm-2016/05/24 để xây dựng. Có vẻ như nhiều lời khuyên tôi đã tìm thấy bằng cách tìm kiếm google chỉ hoạt động trên các phiên bản cũ của gỉ/hàng hóa. –

+1

Tôi nhận được tập lệnh my-linker.sh để làm việc - cảm ơn. Điều đó sẽ làm việc dưới Linux và OSX. Tôi đang xây dựng một cái gì đó lớn hơn nhiều so với một tệp duy nhất, vì vậy tôi không chắc chắn cách gọi điện thoại trực tiếp sẽ giúp ích. Tôi cần phải bao gồm kẽm và phụ thuộc của nó tại thời gian liên kết. 1 trong 3 vẫn là tiến bộ. –

+1

@DaveHylands Tôi đã cập nhật câu trả lời của mình với mô tả cách sử dụng cấu hình 'cargo', bằng cách liên kết bạn cũng có thể đặt trong' .cargo/config' và bạn có thể đặt giá trị khác nhau cho các cấu trúc khác nhau. – fghj

Các vấn đề liên quan