当我在MacOS上编译Linux二进制文件时,遇到了这个问题:看起来rust库“openssl-sys v0.9.61”绑定到了MacOS的C库。无法链接到linux。
cargo build --release --target=x86_64-unknown-linux-musl
Compiling openssl-sys v0.9.61
error: failed to run custom build command for `openssl-sys v0.9.61`
Caused by:
process didn't exit successfully: `~/test/../bin/release/build/openssl-sys-96148dcd52905249/build-script-main` (exit status: 101)
--- stdout
cargo:rustc-cfg=const_fn
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_MUSL_OPENSSL_LIB_DIR
X86_64_UNKNOWN_LINUX_MUSL_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_MUSL_OPENSSL_INCLUDE_DIR
X86_64_UNKNOWN_LINUX_MUSL_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_MUSL_OPENSSL_DIR
X86_64_UNKNOWN_LINUX_MUSL_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_ALLOW_CROSS_x86_64-unknown-linux-musl
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_x86_64_unknown_linux_musl
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-musl
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_musl
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-musl
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_musl
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
run pkg_config fail: "pkg-config has not been configured to support cross-compilation.\n\n Install a sysroot for the target …Run Code Online (Sandbox Code Playgroud) 我想打开 cookie 或返回一个空的&str时间None:
let cookie: Option<Cookie> = req.cookie("timezone");
// right, but foolish:
let timezone: String = match cookie {
Some(t) => t.value().to_string(),
None => "".into(),
};
Run Code Online (Sandbox Code Playgroud)
这是一个错误:
let timezone = cookie.unwrap_or("").value();
Run Code Online (Sandbox Code Playgroud) 我想在 Future::poll() 中调用异步函数,但 poll() 不是异步函数,所以我必须轮询异步 fn,但出现错误:
error[E0599]: no method named `poll` found for opaque type `impl Future` in the current scope
--> src\lib.rs:18:22
|
18 | let a = fut1.poll(cx);
| ^^^^ method not found in `impl Future`
Run Code Online (Sandbox Code Playgroud)
我尝试 Pin::new(async fn()).poll(),得到另一个错误:
error[E0277]: `from_generator::GenFuture<[static generator@src\lib.rs:33:23: 36:2 {ResumeTy, u64, Duration, impl Future, ()}]>` cannot be unpinned
--> src\lib.rs:22:23
|
22 | let pinfut1 = Pin::new(&mut fut1);
| ^^^^^^^^ within `impl Future`, the trait `Unpin` is not implemented for `from_generator::GenFuture<[static generator@src\lib.rs:33:23: 36:2 {ResumeTy, …Run Code Online (Sandbox Code Playgroud) use std::fmt::Debug;
#[derive(Debug)]
struct Node<K: Debug, V: Debug> {
key: K,
value: V,
}
fn myprint<K: Debug + ?Sized, V: Debug + ?Sized>(node: &Node<K,V>) -> String {
return format!("{:?}: {:?}", node.key, node.value);
}
fn main() {
let node = Node{key: "xxx", value: "yyy"};
myprint(&node);
}
Run Code Online (Sandbox Code Playgroud)
编译错误:
use std::fmt::Debug;
#[derive(Debug)]
struct Node<K: Debug, V: Debug> {
key: K,
value: V,
}
fn myprint<K: Debug + ?Sized, V: Debug + ?Sized>(node: &Node<K,V>) -> String {
return format!("{:?}: {:?}", node.key, node.value);
}
fn …Run Code Online (Sandbox Code Playgroud) 通常,我可以像这样设置数据App并从中获取数据:web::Data
let pool = sqlx::MySqlPool::connect("mysql://xxx")
.await
.expect("Mysql Connect error!");
HttpServer::new(move || {
// set the data pool: Pool<MySQL>
App::new()
.data(pool.clone())
.service(web::resource("/home").route(web::get().to(get_xxx)))
})
.bind("0.0.0.0:8000")?
.run()
.await;
Run Code Online (Sandbox Code Playgroud)
// get the data: pool: Pool<MySQL> from argument.
pub async fn get_xxx(
pool: web::Data<Pool<MySql>>,
path: web::Path<String>,
) -> Result<HttpResponse, Error> {
let mut pool = pool.clone();
todo!()
}
Run Code Online (Sandbox Code Playgroud)
如何获取pool: Pool<MySQL>中间件?
这是中间件的示例:
use std::task::{Context, Poll};
use actix_service::{Service, Transform};
use actix_web::dev::{ServiceRequest, ServiceResponse};
use actix_web::{Error, HttpResponse};
use futures::future::{ok, Either, Ready};
pub struct CheckLogin; …Run Code Online (Sandbox Code Playgroud) 我想从数组中删除重复的元素:
use itertools::Itertools;
use std::collections::HashSet;
#[derive(Debug)]
struct Person {
name: String,
age: u32,
}
fn main() {
let arr = [
Person { name: "aaa".to_string(), age: 10 },
Person { name: "bbb".to_string(), age: 20 },
Person { name: "bbb".to_string(), age: 20 },
Person { name: "ccc".to_string(), age: 30 },
];
// Way 1:
let arr2 = {
let names: Vec<_> = arr.iter().map(|v| v.name.clone()).unique().collect();
names
.iter()
.map(|name| arr.iter().find(|person| &person.name == name).unwrap())
.collect::<Vec<_>>()
};
dbg!(arr2);
// Way 2:
let arr2 = { …Run Code Online (Sandbox Code Playgroud) 如何发送通用T?
我尝试将泛型发送T到另一个线程,但我得到:
error[E0308]: mismatched types
--> src/main.rs:23:22
|
23 | t1.merge(Element(vec![3]));
| ^^^^^^^^^^^^^^^^ expected associated type, found struct `Element`
|
= note: expected associated type `<T as Join>::Item`
found struct `Element`
= help: consider constraining the associated type `<T as Join>::Item` to `Element`
Run Code Online (Sandbox Code Playgroud)
完整代码:
trait Join {
type Item;
fn merge(&mut self, other: Self::Item);
}
#[derive(Debug, Default)]
struct Element(Vec<u8>);
impl Join for Element {
type Item = Element;
fn merge(&mut self, mut other: Self::Item) {
self.0.append(&mut …Run Code Online (Sandbox Code Playgroud) 我想将特定类型返回到泛型类型,都是内置类型,所以不能 impl From for u32 { ... }
fn fn1<T>() -> T {
let a = 123u64;
a as T
// ^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
}
fn main() {
let a = fn1::<u32>();
dbg!(a);
}
Run Code Online (Sandbox Code Playgroud)
有什么好办法吗?
rust ×8
generics ×2
actix-web ×1
arrays ×1
duplicates ×1
future ×1
linux ×1
middleware ×1
openssl ×1
option-type ×1
traits ×1
types ×1