我今天在编译一段rust程序的时候,遇见了几个问题,现在整理一下。
自己的 Cargo.toml如下:
name = "scrape_url"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
reqwest = {
version = "0.11",features = ["blocking"]}
html2md = "0.2"
自己的全部代码在src/main.rs
如下:
use std::fs;
fn main() {
let url = "https://www.baidu.com/";
let output = "baidu.md";
println!("获取到的地址: {}", url);
let body = reqwest::blocking::get(url).unwrap().text().unwrap();
println!("正在转换中");
let md = html2md::parse_html(&body);
fs::write(output, md.as_bytes()).unwrap();
println!("md文件放在{}.", output);
}
使用的命令是cargo run
之后全部的描述如下:
Updating crates.io index
Downloaded cfg-if v1.0.0
Downloaded bytes v1.1.0
Downloaded futures-io v0.3.21
Downloaded hashbrown v0.11.2
Downloaded foreign-types v0.3.2
Downloaded url v2.2.2
Downloaded pin-utils v0.1.0
Downloaded rand_pcg v0.2.1
Downloaded proc-macro2 v1.0.36
Downloaded try-lock v0.2.3
Downloaded tower-service v0.3.1
Downloaded utf-8 v0.7.6
Downloaded want v0.3.0
Downloaded autocfg v1.1.0
Downloaded form_urlencoded v1.0.1
Downloaded phf v0.8.0
Downloaded tinyvec v1.5.1
Downloaded tracing v0.1.31
Downloaded futures-sink v0.3.21
Downloaded quote v1.0.15
Downloaded pkg-config v0.3.24
Downloaded once_cell v1.9.0
Downloaded slab v0.4.5
Downloaded serde v1.0.136
Downloaded ryu v1.0.9
Downloaded tokio-util v0.6.9
Downloaded regex v1.5.4
Downloaded unicode-xid v0.2.2
Downloaded bitflags v1.3.2
Downloaded num_cpus v1.13.1
Downloaded parking_lot_core v0.8.5
Downloaded smallvec v1.8.0
Downloaded unicode-normalization v0.1.19
Downloaded unicode-bidi v0.3.7
Downloaded foreign-types-shared v0.1.1
Downloaded futures-task v0.3.21
Downloaded futures-util v0.3.21
Downloaded xml5ever v0.16.2
Downloaded tinyvec_macros v0.1.0
Downloaded hyper v0.14.17
Downloaded mac v0.1.1
Downloaded phf_shared v0.8.0
Downloaded mime v0.3.16
Downloaded markup5ever_rcdom v0.1.0
Downloaded memchr v2.4.1
Downloaded native-tls v0.2.8
Downloaded openssl v0.10.38
Downloaded matches v0.1.9
Downloaded phf_codegen v0.8.0
Downloaded new_debug_unreachable v1.0.4
Downloaded rand_chacha v0.2.2
Downloaded pin-project-lite v0.2.8
Downloaded reqwest v0.11.9
Downloaded tokio v1.17.0
Downloaded regex-syntax v0.6.25
Downloaded encoding_rs v0.8.30
Downloaded libc v0.2.118
Downloaded ppv-lite86 v0.2.16
Downloaded precomputed-hash v0.1.1
Downloaded hyper-tls v0.5.0
Downloaded httparse v1.6.0
Downloaded parking_lot v0.11.2
Downloaded markup5ever v0.10.1
Downloaded ipnet v2.3.1
Downloaded indexmap v1.8.0
Downloaded idna v0.2.3
Downloaded log v0.4.14
Downloaded lock_api v0.4.6
Downloaded httpdate v1.0.2
Downloaded html5ever v0.25.1
Downloaded h2 v0.3.11
Downloaded phf_generator v0.8.0
Downloaded lazy_static v1.4.0
Downloaded itoa v1.0.1
Downloaded instant v0.1.12
Downloaded http-body v0.4.4
Downloaded http v0.2.6
Downloaded html2md v0.2.13
Downloaded string_cache v0.8.3
Downloaded percent-encoding v2.1.0
Downloaded getrandom v0.1.16
Downloaded futf v0.1.5
Downloaded futures-core v0.3.21
Downloaded futures-channel v0.3.21
Downloaded fnv v1.0.7
Downloaded cc v1.0.73
Downloaded tracing-core v0.1.22
Downloaded tokio-native-tls v0.3.0
Downloaded tendril v0.4.2
Downloaded string_cache_codegen v0.5.1
Downloaded siphasher v0.3.9
Downloaded serde_urlencoded v0.7.1
Downloaded scopeguard v1.1.0
Downloaded rand_core v0.5.1
Downloaded phf_shared v0.10.0
Downloaded openssl-probe v0.1.5
Downloaded openssl-sys v0.9.72
Downloaded mio v0.8.0
Downloaded base64 v0.13.0
Downloaded aho-corasick v0.7.18
Downloaded syn v1.0.86
Downloaded time v0.1.44
Downloaded socket2 v0.4.4
Downloaded rand v0.7.3
Downloaded 104 crates (7.1 MB) in 4.93s (largest was `encoding_rs` at 1.4 MB)
Compiling cfg-if v1.0.0
Compiling libc v0.2.118
Compiling log v0.4.14
Compiling getrandom v0.1.16
Compiling autocfg v1.1.0
Compiling proc-macro2 v1.0.36
Compiling siphasher v0.3.9
Compiling unicode-xid v0.2.2
Compiling memchr v2.4.1
Compiling ppv-lite86 v0.2.16
Compiling lazy_static v1.4.0
Compiling pin-project-lite v0.2.8
Compiling serde v1.0.136
Compiling cc v1.0.73
Compiling pkg-config v0.3.24
Compiling futures-core v0.3.21
Compiling parking_lot_core v0.8.5
Compiling bytes v1.1.0
Compiling smallvec v1.8.0
Compiling new_debug_unreachable v1.0.4
Compiling scopeguard v1.1.0
Compiling futures-task v0.3.21
Compiling mac v0.1.1
Compiling itoa v1.0.1
Compiling syn v1.0.86
Compiling futures-util v0.3.21
Compiling fnv v1.0.7
Compiling openssl v0.10.38
Compiling foreign-types-shared v0.1.1
Compiling utf-8 v0.7.6
Compiling precomputed-hash v0.1.1
Compiling httparse v1.6.0
Compiling futures-sink v0.3.21
Compiling futures-io v0.3.21
Compiling slab v0.4.5
Compiling once_cell v1.9.0
Compiling tinyvec_macros v0.1.0
Compiling bitflags v1.3.2
Compiling percent-encoding v2.1.0
Compiling native-tls v0.2.8
Compiling matches v0.1.9
Compiling futures-channel v0.3.21
Compiling pin-utils v0.1.0
Compiling hashbrown v0.11.2
Compiling try-lock v0.2.3
Compiling openssl-probe v0.1.5
Compiling encoding_rs v0.8.30
Compiling unicode-bidi v0.3.7
Compiling tower-service v0.3.1
Compiling httpdate v1.0.2
Compiling regex-syntax v0.6.25
Compiling ryu v1.0.9
Compiling base64 v0.13.0
Compiling ipnet v2.3.1
Compiling mime v0.3.16
Compiling instant v0.1.12
Compiling indexmap v1.8.0
Compiling phf_shared v0.8.0
Compiling phf_shared v0.10.0
Compiling tracing-core v0.1.22
Compiling openssl-sys v0.9.72
Compiling lock_api v0.4.6
Compiling futf v0.1.5
Compiling http v0.2.6
Compiling foreign-types v0.3.2
Compiling tinyvec v1.5.1
Compiling form_urlencoded v1.0.1
Compiling phf v0.8.0
Compiling tracing v0.1.31
Compiling tendril v0.4.2
error: failed to run custom build command for `openssl-sys v0.9.72`
Caused by:
process didn't exit successfully: `/root/scrape_url/target/debug/build/openssl-sys-a9db19d7be43a3ce/build-script-main` (exit status: 101)
--- stdout
cargo:rustc-cfg=const_fn
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR unset
cargo:rerun-if-env-changed=OPENSSL_DIR
OPENSSL_DIR unset
cargo:rerun-if-env-changed=OPENSSL_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=OPENSSL_STATIC
cargo:rerun-if-env-changed=OPENSSL_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
run pkg_config fail: "Could not run `\"pkg-config\" \"--libs\" \"--cflags\" \"openssl\"`\nThe pkg-config command could not be found.\n\nMost likely, you need to install a pkg-config package for your OS.\nTry `apt install pkg-config`, or `yum install pkg-config`,\nor `pkg install pkg-config` depending on your distribution.\n\nIf you've already installed it, ensure the pkg-config command is one of the\ndirectories in the PATH environment variable.\n\nIf you did not expect this build to link to a pre-installed system library,\nthen check documentation of the openssl-sys crate for an option to\nbuild the library from source, or disable features or dependencies\nthat require pkg-config."
--- stderr
thread 'main' panicked at '
Could not find directory of OpenSSL installation, and this `-sys` crate cannot proceed without this knowledge. If OpenSSL is installed and this crate had trouble finding it, you can set the `OPENSSL_DIR` environment variable for the compilation process.
Make sure you also have the development packages of openssl installed.
For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora.
If you're in a situation where you think the directory *should* be found automatically, please open a bug at https://github.com/sfackler/rust-openssl and include information about your system as well as this message.
$HOST = x86_64-unknown-linux-gnu
$TARGET = x86_64-unknown-linux-gnu
openssl-sys = 0.9.72
It looks like you're compiling on Linux and also targeting Linux. Currently this requires the `pkg-config` utility to find OpenSSL but unfortunately `pkg-config` could not be found. If you have OpenSSL installed you can likely fix this by installing `pkg-config`.
', /root/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-sys-0.9.72/build/find_normal.rs:180:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build failed
我觉得这是没有设置代理的错误,于是我使用export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
设置一下代理。再次执行cargo run
,出现了下边的描述:
` Compiling openssl-sys v0.9.72
Compiling http-body v0.4.4
error: failed to run custom build command for `openssl-sys v0.9.72`
Caused by:
process didn't exit successfully: `/root/scrape_url/target/debug/build/openssl -sys-a9db19d7be43a3ce/build-script-main` (exit status: 101)
--- stdout
cargo:rustc-cfg=const_fn
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR unset
cargo:rerun-if-env-changed=OPENSSL_DIR
OPENSSL_DIR unset
cargo:rerun-if-env-changed=OPENSSL_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFI