"macro undefined" 编译 hyper 0.9.17 时出错
"macro undefined" error while compiling hyper 0.9.17
我正在尝试使用 this source as a tutorial 通过 Iron 构建 Web 服务,但我在编译 hyper 期间遇到错误:
Compiling hyper v0.9.17
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:62:23: 62:30 error: macro undefined: 'langtag!'
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:62 qitem(langtag!(en;;;US)),
^~~~~~~
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:63:34: 63:41 error: macro undefined: 'langtag!'
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:63 QualityItem::new(langtag!(en), Quality(500)),
^~~~~~~
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:64:23: 64:30 error: macro undefined: 'langtag!'
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:64 qitem(langtag!(fr)),
^~~~~~~
我使用的版本:
- cargo 0.8.0(内置于 2016-03-22)
- rustc 1.7.0
Cargo.toml
[package]
name = "hello"
version = "0.1.0"
authors = ["root"]
[dependencies]
language-tags = "0.2.2"
iron = "0.4.0"
main.rs:
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();
}
我只在 Cargo.toml 中添加了语言标签,因为我认为它可以解决我的问题。未进行其他更改。
旧版本的 Rust 导致了这个问题。今天 Rust 的稳定版本是 1.14.0,但在我的 Digital Ocean VM 上,预装了 Rust 1.7。即使在 运行 官方安装程序之后,版本仍然是 1.7:
curl https://sh.rustup.rs -sSf | sh
安装后显示:
Welcome to Rust!
This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.
It will add the cargo, rustc, rustup and other commands to Cargo's bin
directory, located at:
/root/.cargo/bin
This path will then be added to your PATH environment variable by
modifying the profile file located at:
/root/.profile
我使用不使用 ~/.profile 的 zsh。所以 PATH
环境变量没有为我改变,因此命令 cargo run
指向 /usr/bin/cargo
中预安装的旧版本而不是 ~/.cargo/bin
.
您可以使用命令 which cargo
或 which rustc
找出可执行文件所在的位置。
解决方案是使用 ~/.cargo/bin/cargo run
。对于 zsh,您还可以通过添加
将文件夹 ~/.cargo/bin
添加到您的 PATH
环境变量
export PATH="~/.cargo/bin:$PATH"
到你的 .zshrc
我正在尝试使用 this source as a tutorial 通过 Iron 构建 Web 服务,但我在编译 hyper 期间遇到错误:
Compiling hyper v0.9.17
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:62:23: 62:30 error: macro undefined: 'langtag!'
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:62 qitem(langtag!(en;;;US)),
^~~~~~~
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:63:34: 63:41 error: macro undefined: 'langtag!'
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:63 QualityItem::new(langtag!(en), Quality(500)),
^~~~~~~
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:64:23: 64:30 error: macro undefined: 'langtag!'
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:64 qitem(langtag!(fr)),
^~~~~~~
我使用的版本:
- cargo 0.8.0(内置于 2016-03-22)
- rustc 1.7.0
Cargo.toml
[package]
name = "hello"
version = "0.1.0"
authors = ["root"]
[dependencies]
language-tags = "0.2.2"
iron = "0.4.0"
main.rs:
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();
}
我只在 Cargo.toml 中添加了语言标签,因为我认为它可以解决我的问题。未进行其他更改。
旧版本的 Rust 导致了这个问题。今天 Rust 的稳定版本是 1.14.0,但在我的 Digital Ocean VM 上,预装了 Rust 1.7。即使在 运行 官方安装程序之后,版本仍然是 1.7:
curl https://sh.rustup.rs -sSf | sh
安装后显示:
Welcome to Rust!
This will download and install the official compiler for the Rust programming language, and its package manager, Cargo.
It will add the cargo, rustc, rustup and other commands to Cargo's bin directory, located at:
/root/.cargo/bin
This path will then be added to your PATH environment variable by modifying the profile file located at:
/root/.profile
我使用不使用 ~/.profile 的 zsh。所以 PATH
环境变量没有为我改变,因此命令 cargo run
指向 /usr/bin/cargo
中预安装的旧版本而不是 ~/.cargo/bin
.
您可以使用命令 which cargo
或 which rustc
找出可执行文件所在的位置。
解决方案是使用 ~/.cargo/bin/cargo run
。对于 zsh,您还可以通过添加
~/.cargo/bin
添加到您的 PATH
环境变量
export PATH="~/.cargo/bin:$PATH"
到你的 .zshrc