2016-01-21 68 views
1

我目前正在尝试安装一个嵌入式Rust项目。为此,如果我可以使用collections板条箱(以及由collections所要求的扩展板,alloc板条箱)将会很好。有没有简单的方法来实现这一目标?我目前在Cargo.toml使用收藏与货物没有stdlib

[build-dependencies] 
gcc = "0.3" 

[dependencies] 
rust-libcore = "*" 

[dependencies.rlibc] 
git = "https://github.com/hackndev/rlibc" 
branch = "zinc" 

以下的依赖性和如下使用它们:

#![no_std] 
#![crate_type="staticlib"] 
#![feature(lang_items)] 
#![feature(start)] 

// This is not found when building with Cargo 
extern crate collections; 

//#[cfg(target_os = "none")] 
extern crate rlibc; 

#[start] 
pub fn main(_argc: isize, _argv: *const *const u8) -> isize { 
    // or some call like this 
    core::collections::Vec::new(); 

    0 
} 

有没有一种简单的方法包括collections箱子?

+0

您是否有一些底层分配器可用于嵌入式设备?我不知道jemalloc是否支持ARM,如果不支持,则必须有一些分配器可用。 – Shepmaster

回答

0

一个可能的解决方案是自己编译它。这需要检查Rust源。我没有一个工作环境来测试这个,所以采取一点盐的建议。从概念上讲,你应该这样做:

cd $RUST_SRC_DIR 
rustc --version --verbose | grep commit-hash # Grab the hash 
git checkout $RUSTC_HASH 
mkdir cross-compiled-libraries 
rustc --target=arm-whatever-whatever -O src/libcollections/lib.rs \ 
     --out-dir cross-compiled-libraries 

对你需要的任何库重复最后一步。很多这是从Embedded Rust Right Now!的想法。

这个解决方案的一个大问题是libcollections需要一个分配器。通常,有jemalloc或系统分配器。我不知道是否有任何可用的目标,你正在编译...

这并不完全让你一路易于使用货物的东西,无论是。 Rust里面的东西实际上并不是货物,也不是。您可以创建新货的项目,并添加像这样的Cargo.toml

[lib] 
path = "/path/to/rust/src/libcollections/lib.rs" 

那么这将让你依靠的货物更多。