带serde的项目无法编译

时间:2016-12-15 14:52:18

标签: rust serde

当我尝试运行示例from the serde repository时:

#![feature(proc_macro)]

#[macro_use]
extern crate serde_derive;

extern crate serde_json;

#[derive(Serialize, Deserialize, Debug)]
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let point = Point { x: 1, y: 2 };

    // Convert the Point to a JSON string.
    let serialized = serde_json::to_string(&point).unwrap();

    // Prints serialized = {"x":1,"y":2}
    println!("serialized = {}", serialized);

    // Convert the JSON string back to a Point.
    let deserialized: Point = serde_json::from_str(&serialized).unwrap();

    // Prints deserialized = Point { x: 1, y: 2 }
    println!("deserialized = {:?}", deserialized);
}

我收到错误:

  

错误:无法运行rustc以了解特定于目标的内容   信息

     

引起:进程未成功退出:rustc - --crate-name _ --print=file-names --crate-type bin --crate-type proc-macro --crate-type rlib --target x86_64-unknown-linux-gnu(退出代码:101)   --- stderr错误:未知的箱子类型:proc-macro

我的Rust版本是1.13.0,我的Cargo.toml有这些依赖项:

[dependencies]
serde = "*"
serde_derive = "*"

我应该使用其他依赖项还是额外配置?

1 个答案:

答案 0 :(得分:0)

#![feature(...)]属性表示使用尚未稳定的Rust功能的代码。在提出问题时,proc_macro功能尚未稳定。 Serde需要此功能用于其#[derive(Serialize, Deserialize)]宏。

Rust 1.15起自定义派生已经稳定,因此问题中的代码(删除了feature属性)应该适用于任何Rust编译器,因为该版本。