"宏未定义"编译超级0.9.17时出错

时间:2017-01-28 21:59:54

标签: rust rust-cargo iron hyper

我正在尝试使用this source as a tutorial使用Iron构建一个Web服务,但我在编译hyper时遇到错误:

[package]
name = "hello"
version = "0.1.0"
authors = ["root"]

[dependencies]
language-tags = "0.2.2"
iron = "0.4.0"

我使用的版本:

  • 货物0.8.0(建于2016-03-22)
  • rustc 1.7.0

Cargo.toml

extern crate iron;

use iron::prelude::*;
use iron::status;
use iron::mime::Mime;

fn main() {
  Iron::new(|_: &mut Request| {
  let content_type = "application/json".parse::<Mime>().unwrap();

  Ok(Response::with((content_type, status::Ok, "{ respone: \"Hello world!\" }")))
 }).http("localhost:3009").unwrap();
}

main.rs:

    /* Minimum interval for a periodic job, in milliseconds. */
private static final long MIN_PERIOD_MILLIS = 15 * 60 * 1000L;   // 15 minutes

我只在Cargo.toml中添加了语言标签,因为我认为这样可以解决我的问题。没有进行其他更改。

1 个答案:

答案 0 :(得分:1)

旧版本的Rust导致了这个问题。今天Rust的稳定版本是1.14.0,但在我的Digital Ocean VM上,预装了Rust 1.7。即使在运行官方安装程序后,版本仍为1.7:

curl https://sh.rustup.rs -sSf | sh

安装后说:

  

欢迎来到Rust!

     

这将下载并安装Rust的官方编译器   编程语言及其包管理器Cargo。

     

它会将货物,rustc,rustup和其他命令添加到Cargo的垃圾箱   目录,位于:

/root/.cargo/bin
     

然后,此路径将添加到您的PATH环境变量中   修改位于以下位置的配置文件:

/root/.profile

我使用不使用〜/ .profile的zsh。因此,我没有更改PATH环境变量,因此命令cargo run指向/usr/bin/cargo中预先安装的旧版本而不是~/.cargo/bin

您可以使用命令which cargowhich rustc找到可执行文件的位置。

解决方案是使用~/.cargo/bin/cargo run。对于zsh,您还可以通过添加

将文件夹~/.cargo/bin添加到PATH环境变量中
export PATH="~/.cargo/bin:$PATH"

到你的.zshrc