让Rust连接到OS X上针对i686-unknown-linux-gnu的核心库时遇到一些麻烦:
MacBook:rustboot alex$ make
rustc -O --target i686-unknown-linux-gnu --crate-type lib -o main.o --emit obj main.rs
main.rs:5:1: 5:19 error: can't find crate for `core`
main.rs:5 extern crate core;
^~~~~~~~~~~~~~~~~~
error: aborting due to previous error
make: *** [main.o] Error 101
main.rs看起来像这样:
#![no_std]
#![allow(ctypes)]
#![feature(lang_items)]
extern crate core;
use core::prelude::*;
#[no_mangle]
#[no_split_stack]
pub fn main() {
}
我怀疑是因为我试图链接到i686-unknown-linux-gnu但是该平台不存在核心库。如何为该平台安装或构建库?
答案 0 :(得分:10)
这是由您所定位的平台不存在的核心库造成的。有一些方法可以获得它:
rustup target add i686-unknown-gnu-linux
应该诀窍Cargo.toml
并使用cargo build --target=...
,让core-nightly
完成所有艰苦工作。不幸的是,它似乎暂时没有更新,但可以通过从the Rust repo复制src/libcore
,添加Cargo.toml
并使用path
来制作本地包依赖;在将来,它很可能也会通过crates.io正式提供,但我不知道这有多远。lib/rustlib/
)或在任何地方提取~/.multirust/toolchains/nightly-2015-01-18/lib/rustlib
目录。将-L
标志传递给编译器(我不是100%确定-L
标志应指向的确切位置。)./configure --target=$yourtarget
然后make
应该构建一个可以在当前计算机上运行的编译器,还可以创建在所需目标上运行的二进制文件目前货物航线绝对是最容易的。交叉编译故事将来肯定会变得更容易,例如使multirust为第三种可能性做所有复杂的比特。但是,第三种和第四种方式都依赖于能够为您的平台构建std
,这似乎不太适合内核工作。
(顺便说一下,rlibc包也是内核工作所必需的。)