做盒饭的网站/广州百度seo 网站推广

做盒饭的网站,广州百度seo 网站推广,wordpress image.php,制作照片视频的软件OpenHarmony子系统开发 - Rust编译构建指导 一、Rust模块配置规则和指导 概述 Rust是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。Rust官方也使用Cargo工具来专门为Rust代码创建工程和构建编译。 OpenHarmony为了集成C…

OpenHarmony子系统开发 - Rust编译构建指导

一、Rust模块配置规则和指导

概述

Rust是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。Rust官方也使用Cargo工具来专门为Rust代码创建工程和构建编译。 OpenHarmony为了集成C/C++代码和提升编译速度,使用了GN + Ninja的编译构建系统。GN的构建语言简洁易读,Ninja的汇编级编译规则直接高效。 为了在OpenHarmony中集成Rust代码,并最大程度发挥Rust和OpenHarmony中原有C/C++代码的交互性,采用GN作为统一构建工具,即通过GN构建Rust源码文件(xxx.rs),并增加与C/C++互操作、编译时lint、测试、IDL转换、三方库集成、IDE等功能。同时扩展gn框架,支持接口自动化转换,最大程度简化开发。

基本概念

术语描述
CargoCargo是Rust官方使用的构建工具,允许Rust项目声明其各种依赖项,并确保您始终获得可重复的构建。
cratecrate是一个独立的可编译单元。
LintLint是指出常见编程错误、错误、样式错误和可疑结构的工具。可以对程序进行更加广泛的错误分析。

配置规则

OpenHarmony提供了用于Rust代码编译构建的各类型GN模板,可以用于编译Rust可执行文件,动态库和静态库等。各类型模板说明如下:

GN模板功能输出
ohos_rust_executablerust可执行文件rust可执行文件,不带后缀
ohos_rust_shared_libraryrust动态库rust dylib动态库,默认后缀.dylib.so
ohos_rust_static_libraryrust静态库rust rlib静态库,默认后缀.rlib
ohos_rust_proc_macrorust proc_macrorust proc_macro库, 默认后缀.so
ohos_rust_shared_ffirust FFI动态库rust cdylib动态库,给C/C++模块调用,默认后缀.so
ohos_rust_static_ffirust FFI静态库rust staticlib库,给C/C++模块调用,默认后缀.a
ohos_rust_cargo_crate三方包Cargo craterust三方crate,支持rlib、dylib、bin
ohos_rust_systemtestrust系统测试用例rust可执行系统测试用例,不带后缀
ohos_rust_unittestrust单元测试用例rust可执行单元测试用例,不带后缀
ohos_rust_fuzztestrust Fuzz测试用例rust可执行Fuzz测试用例,不带后缀

配置指导

配置Rust模块与C/C++模块类似,参考模块配置规则。下面是使用不同模板的示例。

配置Rust静态库示例

该示例用于测试Rust可执行bin文件和静态库rlib文件的编译,以及可执行文件对静态库的依赖,使用模板ohos_rust_executable和ohos_rust_static_library。操作步骤如下:

  1. 创建build/rust/tests/test_rlib_crate/src/simple_printer.rs,如下所示:

    //! simple_printer/// struct RustLogMessagepub struct RustLogMessage {/// i32: idpub id: i32,/// String: msgpub msg: String,
    }/// function rust_log_rlib
    pub fn rust_log_rlib(msg: RustLogMessage) {println!("id:{} message:{:?}", msg.id, msg.msg)
    }
    
  2. 创建build/rust/tests/test_rlib_crate/src/main.rs,如下所示:

    //! rlib_crate example for Rust.extern crate simple_printer_rlib;use simple_printer_rlib::rust_log_rlib;
    use simple_printer_rlib::RustLogMessage;fn main() {let msg: RustLogMessage = RustLogMessage {id: 0,msg: "string in rlib crate".to_string(),};rust_log_rlib(msg);
    }
    
  3. 配置gn脚本build/rust/tests/test_rlib_crate/BUILD.gn,如下所示:

    import("//build/ohos.gni")ohos_rust_executable("test_rlib_crate") {sources = [ "src/main.rs" ]deps = [ ":simple_printer_rlib" ]
    }ohos_rust_static_library("simple_printer_rlib") {sources = [ "src/simple_printer.rs" ]crate_name = "simple_printer_rlib"crate_type = "rlib"features = [ "std" ]
    }
    
  4. 执行编译得到的可执行文件,运行结果如下:

    test_rlib_crate

配置三方库示例

rust三方库的BUILD.gn文件可通过cargo2gn工具自动生成。参见:Cargo2gn工具操作指导

该示例用于测试包含预编译文件build.rs的三方静态库rlib文件的编译,使用了模板ohos_rust_executable和ohos_rust_cargo_crate。操作步骤如下:

  1. 创建build/rust/tests/test_rlib_cargo_crate/crate/src/lib.rs,如下所示:

    include!(concat!(env!("OUT_DIR"), "/generated/generated.rs"));pub fn say_hello_from_crate() {assert_eq!(run_some_generated_code(), 45);#[cfg(is_new_rustc)]println!("Is new rustc");#[cfg(is_old_rustc)]println!("Is old rustc");#[cfg(is_ohos)]println!("Is ohos");#[cfg(is_mac)]println!("Is darwin");#[cfg(has_feature_a)]println!("Has feature_a");#[cfg(not(has_feature_a))]panic!("Wasn't passed feature_a");#[cfg(not(has_feature_b))]#[cfg(test_a_and_b)]panic!("feature_b wasn't passed");#[cfg(has_feature_b)]#[cfg(not(test_a_and_b))]panic!("feature_b was passed");
    }#[cfg(test)]
    mod tests {/// Test features are passed through from BUILD.gn correctly. This test is the target configuration.#[test]#[cfg(test_a_and_b)]fn test_features_passed_target1() {#[cfg(not(has_feature_a))]panic!("feature a was not passed");#[cfg(not(has_feature_b))]panic!("feature b was not passed");}#[test]fn test_generated_code_works() {assert_eq!(crate::run_some_generated_code(), 45);}
    }
    
  2. 创建build/rust/tests/test_rlib_cargo_crate/crate/src/main.rs,如下所示:

    pub fn main() {test_rlib_crate::say_hello_from_crate();
    }
    
  3. 创建build/rust/tests/test_rlib_cargo_crate/crate/build.rs,如下所示:

    use std::env;
    use std::path::Path;
    use std::io::Write;
    use std::process::Command;
    use std::str::{self, FromStr};fn main() {println!("cargo:rustc-cfg=build_script_ran");let my_minor = match rustc_minor_version() {Some(my_minor) => my_minor,None => return,};if my_minor >= 34 {println!("cargo:rustc-cfg=is_new_rustc");} else {println!("cargo:rustc-cfg=is_old_rustc");}let target = env::var("TARGET").unwrap();if target.contains("ohos") {println!("cargo:rustc-cfg=is_ohos");}if target.contains("darwin") {println!("cargo:rustc-cfg=is_mac");}let feature_a = env::var_os("CARGO_FEATURE_MY_FEATURE_A").is_some();if feature_a {println!("cargo:rustc-cfg=has_feature_a");}let feature_b = env::var_os("CARGO_FEATURE_MY_FEATURE_B").is_some();if feature_b {println!("cargo:rustc-cfg=has_feature_b");}// Some tests as to whether we're properly emulating various cargo features.assert!(Path::new("build.rs").exists());assert!(Path::new(&env::var_os("CARGO_MANIFEST_DIR").unwrap()).join("build.rs").exists());assert!(Path::new(&env::var_os("OUT_DIR").unwrap()).exists());// Confirm the following env var is setenv::var_os("CARGO_CFG_TARGET_ARCH").unwrap();generate_some_code().unwrap();
    }fn generate_some_code() -> std::io::Result<()> {let test_output_dir = Path::new(&env::var_os("OUT_DIR").unwrap()).join("generated");let _ = std::fs::create_dir_all(&test_output_dir);// Test that environment variables from .gn files are passed to build scriptslet preferred_number = env::var("ENV_VAR_FOR_BUILD_SCRIPT").unwrap();let mut file = std::fs::File::create(test_output_dir.join("generated.rs"))?;write!(file, "fn run_some_generated_code() -> u32 {{ {} }}", preferred_number)?;Ok(())
    }fn rustc_minor_version() -> Option<u32> {let rustc_bin = match env::var_os("RUSTC") {Some(rustc_bin) => rustc_bin,None => return None,};let output = match Command::new(rustc_bin).arg("--version").output() {Ok(output) => output,Err(_) => return None,};let rustc_version = match str::from_utf8(&output.stdout) {Ok(rustc_version) => rustc_version,Err(_) => return None,};let mut pieces = rustc_version.split('.');if pieces.next() != Some("rustc 1") {return None;}let next_var = match pieces.next() {Some(next_var) => next_var,None => return None,};u32::from_str(next_var).ok()
    }
    
  4. 配置gn脚本build/rust/tests/test_rlib_cargo_crate/BUILD.gn,如下所示:

    import("//build/templates/rust/ohos_cargo_crate.gni")ohos_cargo_crate("target") {crate_name = "test_rlib_crate"crate_root = "crate/src/lib.rs"sources = [ "crate/src/lib.rs" ]#To generate the build_script binarybuild_root = "crate/build.rs"build_sources = [ "crate/build.rs" ]build_script_outputs = [ "generated/generated.rs" ]features = ["my-feature_a","my-feature_b","std",]rustflags = ["--cfg","test_a_and_b",]rustenv = [ "ENV_VAR_FOR_BUILD_SCRIPT=45" ]
    }# Exists to test the case that a single crate has both a library and a binary
    ohos_cargo_crate("test_rlib_crate_associated_bin") {crate_root = "crate/src/main.rs"crate_type = "bin"sources = [ "crate/src/main.rs" ]#To generate the build_script binarybuild_root = "crate/build.rs"build_sources = [ "crate/build.rs" ]features = ["my-feature_a","my-feature_b","std",]rustenv = [ "ENV_VAR_FOR_BUILD_SCRIPT=45" ]deps = [ ":target" ]
    }
    
  5. 执行编译得到的可执行文件,运行结果如下:

    test_rlib_cargo_crate

其他源码实例

在build/rust/tests目录下有Rust各类型模块的配置实例可供参考:

用例目录测试功能
build/rust/tests/test_bin_crate用ohos_rust_executable模板在host平台编译可执行文件,在target平台上运行可执行文件。
build/rust/tests/test_static_link测试可执行文件对标准库的静态链接。
build/rust/tests/test_dylib_crate测试对动态库的编译和动态链接功能
build/rust/tests/test_rlib_crate测试对静态库的编译和静态链接功能
build/rust/tests/test_proc_macro_crate测试对Rust过程宏的编译和链接功能。提供对不同类型的宏的测试用例。
build/rust/tests/test_cdylib_crate测试将Rust代码编译成C/C++动态库。
build/rust/tests/test_staticlib_crate测试将Rust代码编译成C/C++静态库。
build/rust/tests/rust_test_ut测试Rust代码单元测试模板功能(ability)。
build/rust/tests/rust_test_st测试Rust代码系统测试模板功能(ability)。
build/rust/tests/test_bin_cargo_crate测试Rust三方可执行文件的编译和运行。三方源码中包含build.rs。
build/rust/tests/test_rlib_cargo_crate测试Rust三方静态库的编译和静态链接。三方源码中包含build.rs。
build/rust/tests/test_proc_macro_cargo_crate测试Rust三方过程宏的编译和链接。三方源码中包含build.rs。
build/rust/tests/rust_test_fuzzb测试Rust代码Fuzz测试模板功能。

参考

特性点实例

Rust源码依赖调用C/C++库

OpenHarmony上C/C++模块动态库默认用.z.so后缀,但是Rust的编译命令通过-l链接时,默认只会链接.so后缀的动态库。因此如果要依赖一个C/C++动态库编译模块,需要在该动态库的GN构建文件中添加output_extension = "so"的声明,这样编译得到的动态库将会以".so"作为后缀,而不是".z.so"。 在Rust源码中如果直接链接动态库,后缀也需要使用".so",这时使用动态库的中间名,不需要添加lib前缀。例如Rust源码中链接libhilog.so:

#[link(name = "hilog")]
externs使用

某个模块如果依赖二进制的rlib库,可以使用externs属性:

executable("foo") {sources = [ "main.rs" ]externs = [{                    # 编译时会转成`--extern bar=path/to/bar.rlib`crate_name = "bar"path = "path/to/bar.rlib"}]
}

Lint规则

OpenHarmony框架支持rustc lints和clippy lints两种Lint,每种Lint划为三个等级的标准:"openharmony"、"vendor"和"none",严格程度按照"openharmony" -> "vendor" -> "none"逐级递减。 配置Rust模块时可以通过rustc_lints和clippy_lints来指定使用Lint的等级。 模块中没有配置rustc_lints或者clippy_lints时会根据模块所在路径来匹配lints等级。不同路径下的Rust代码的语法规范会有不同程度地约束,因此用户在OpenHarmony配置Rust代码编译模块时还应关注模块所在路径。

rustc lints和clippy lints的各等级标志
lints类型模块属性lints等级lints等级标志lints内容
rustc_lintsrustc_lintsopenharmonyRustOhosLints"-A deprecated", "-D missing-docs", "-D warnigngs"
rustc_lintsrustc_lintsvendorRustcVendorLints"-A deprecated", "-D warnigs"
rustc_lintsrustc_lintsnoneallowAllLints"-cap-lints allow"
clippy lintsclippy lintsopenharmonyClippyOhosLints"-A clippy::type-complexity", "-A clippy::unnecessary-wraps", "-A clippy::unusual-byte-groupings", "-A clippy::upper-case-acronyms"
clippy lintsclippy lintsvendorClippyVendorLints"-A clippy::complexity", "-A Clippy::perf", "-A clippy::style"
clippy lintsclippy lintsnoneallowAllLints"--cap-lints allow"
代码路径与lints等级的对应关系
路径Lints等级
thirdpartynone
prebuiltsnone
vendorvendor
devicevendor
othersopenharmony

交互工具使用指导

Cargo2gn工具操作指导

二、Rust 工具链使用说明

简介

本文用于指导 Rust 语言开发者编译构建 OpenHarmony OS Rust 应用程序。

Rust 是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。

本工具链基于开源 rust 与 llvm 增量开发,适配了 OpenHarmony OS target 二进制构建。可将 rust 源码编译成能在 OpenHarmony OS 设备上使用的目标二进制。

使用场景

  • 在 Linux x86环境本地编译 Linux x86 目标二进制或交叉编译 OpenHarmony OS 目标二进制。
  • 在 Mac x86 环境本地编译 Mac x86 目标二进制。
  • 在 Mac arm64 环境本地编译 Mac arm64 目标二进制。

操作指导

OpenHarmony 社区代码编译

  1. 下载或更新环境中 OpenHarmony 社区代码,下载方式可参考获取源码。

  2. 执行源码中脚本下载安装工具链。

    ./build/prebuilts_download.sh
    
  3. 准备待编译代码。

    创建 build/rust/tests/test_bin_crate 目录,目录下新建如下所示文件与文件夹。

    ├── BUILD.gn
    └── src└── main.rs
    

    main.rs 代码示例。

    //! Hello world example for Rust.fn main() {println!("Hello, world!");println!(env!("RUSTENV_TEST"));
    }
    

    BUILD.gn 代码示例。

    import("//build/ohos.gni")ohos_rust_executable("test_bin_crate") {sources = [ "src/main.rs" ]rustenv = [ "RUSTENV_TEST=123" ]features = [ "std" ]if (is_mingw) {rust_static_link = true}
    }
    
  4. 执行编译命令。

    ./build.sh --product-name {product_name} --build-target
    

    以RK3568为例,若要编译,请执行如下命令。

    ./build.sh --product-name rk3568 --build-target build/rust/tests/test_bin_crate:test_bin_crate –no-prebuilt-sdk
    

    编译生成的文件。

    ./out/rk3568/build/build_framework/test_bin_crate
    

非OpenHarmony 社区代码编译

安装 rust 工具链
  1. 下载 build 仓代码。

    git clone git@gitee.com:openharmony/build.git
    
  2. 执行脚本下载安装工具链。

    ./build/prebuilts_download.sh
    
  3. 查看安装情况。

    ./prebuilts/rustc/linux-x86_64/current/bin/rustc --version
    

    有类似如下显示表示安装成功。

    rustc 1.72.0-nightly (xxxx)
    
安装 OpenHarmony OS Clang 工具

icon-note

说明

用于在 Linux x86 环境下进行 OpenHarmony OS 的 target 交叉编译,不编译 OpenHarmony OS target 可不安装。

  1. 在 OpenHarmony 的最新版本说明中获取 SDK 包下载路径

    ohos_sdk_download

  2. 选择 Linux 环境 SDK 包下载,依次解压下载的压缩包。

    mv ohos-sdk-windows_linux-public.tar.gz /opt/
    cd /opt/
    tar -zxvf ohos-sdk-windows_linux-public.tar.gz
    cd ohos-sdk/linux
    unzip native-linux-x64-4.1.7.5-Release.zip
    
编译代码
  1. 代码用例main.rs。

    fn main() {println!("hello world");
    }
    
  2. 编译 target 为本地环境时命令示例。

    ./prebuilts/rustc/linux-x86_64/current/bin/rustc main.rs
    

    执行构建结果。

    ./main
    hello world
    
  3. 编译 target 为 armv7-unknown-linux-ohos时命令示例。

    ./prebuilts/rustc/linux-x86_64/current/bin/rustc main.rs --target=armv7-unknown-linux-ohos -C linker=/opt/ohos-sdk/linux/native/llvm/bin/armv7-unknown-linux-ohos-clang
    
  4. 编译 target 为 aarch64-unknown-linux-ohos时命令示例。

    ./prebuilts/rustc/linux-x86_64/current/bin/rustc main.rs --target=aarch64-unknown-linux-ohos -C linker=/opt/ohos-sdk/linux/native/llvm/bin/aarch64-unknown-linux-ohos-clang
    
  5. 编译 target 为 x86_64-unknown-linux-ohos时命令示例。

    ./prebuilts/rustc/linux-x86_64/current/bin/rustc main.rs --target=x8

三、Cargo2gn工具操作指导

概述

rust三方库使用cargo编译,配置为Cargo.toml。集成到OpenHarmony上需要转换成BUILD.gn规则。为了满足这个需求,需要提供一个cargo2gn转换工具。当需要引入rust三方crate时使用cargo2gn转换工具来把三方库的Cargo.toml转换成BUILD.gn规则。cargo2gn可以单个库进行转换,也可以多个库进行批量转换。

单个库转换操作步骤

  1. 进入到需要转化的rust三方库的目录下,比如需要转化bindgen。

    cd openharmony/third_party/rust/bindgen
    
  2. 创建配置文件cargo2gn.json,可以参考如下配置。

    {"copy-out": true,"run": true,"add-workspace": true,"cargo-bin": "/mnt/xxx/openharmony/prebuilts/rustc/linux-x86_64/current/bin"
    }
    
  3. 执行以下命令进行转换。

    python3 /mnt/xxx/openharmony/build/scripts/cargo2gn.py --config cargo2gn.json
    

    转换结果

    import("//build/templates/rust/ohos_cargo_crate.gni")ohos_cargo_crate("lib") {crate_name = "bindgen"crate_type = "rlib"crate_root = "./lib.rs"sources = ["./lib.rs"]edition = "2018"cargo_pkg_version = "0.64.0"cargo_pkg_authors = "Jyun-Yan You <jyyou.tw@gmail.com>,  Emilio Cobos Álvarez <emilio@crisal.io>,  Nick Fitzgerald <fitzgen@gmail.com>,  The Servo project developers"cargo_pkg_name = "bindgen"cargo_pkg_description = "Automatically generates Rust FFI bindings to C and C++ libraries."deps = ["//third_party/rust/bitflags:lib","//third_party/rust/cexpr:lib","//third_party/rust/clang-sys:lib","//third_party/rust/lazy_static:lib","//third_party/rust/lazycell:lib","//third_party/rust/log:lib","//third_party/rust/peeking_take_while:lib","//third_party/rust/proc-macro2:lib","//third_party/rust/quote:lib","//third_party/rust/regex:lib","//third_party/rust/rustc-hash:lib","//third_party/rust/shlex:lib","//third_party/rust/syn:lib","//third_party/rust/which:lib",]features = ["default","log","logging","static","which","which-rustfmt",]build_root = "build.rs"build_sources = ["build.rs"]build_script_outputs = ["host-target.txt"]
    }
    

多个库批量转换操作步骤

  1. 进入到rust目录下。

    cd openharmony/third_party/rust
    
  2. 把所有需要转换的rust三方库添加到rust目录下的Cargo.toml的[workspace]里,如下所示。

    [workspace]
    members = ["aho-corasick","memchr",
    ]
    
  3. 执行单个库转换操作步骤的2和3。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32驱动代码规范化编写指南(嵌入式C语言方向)

点击下面图片&#xff0c;为您提供全新的嵌入式学习路线 文章目录 一、命名规范体系1.1 变量/函数命名1.2 宏定义规范1.3 类型定义 二、代码结构组织2.1 文件组织结构2.2 头文件规范模板 三、注释体系构建3.1 Doxygen风格示例3.2 复杂逻辑注释 四、硬件抽象层设计4.1 寄存器封…

Trae与Builder模式初体验

说明 下载的国际版&#xff1a;https://www.trae.ai/ 建议 要选新模型 效果 还是挺不错的&#xff0c;遇到问题反馈一下&#xff0c;AI就帮忙解决了&#xff0c;真是动动嘴&#xff08;打打字就行了&#xff09;&#xff0c;做些小的原型效果或演示Demo很方便呀&#xff…

【设计模式】《设计模式:可复用面向对象软件的基础》:设计模式怎样解决设计问题?

文章目录 ⭐前言⭐一、设计模式怎样解决设计问题&#xff1f;&#x1f31f;1、寻找合适的对象&#x1f31f;2、决定对象的粒度&#x1f31f;3、指定对象接口&#x1f31f;4、描述对象的实现&#x1f31f;5、运用复用机制✨(1)针对接口编程&#xff0c;而不是针对实现编程。✨(2…

【项目管理git】git学习

ps&#xff1a;所有东西都是个人理解 文章目录 一、git是什么&#xff0c;它用来做什么&#xff1f;二、相关知识库2.1 简单的linux指令2.2 git配置指令2.3 git常见的指令2.3.1 Git的上传原理2.3.2 版本回退相关内容 2.4 设置远程地址&#xff0c;本地上传到github2.4.1 ssh相…

python速通小笔记-------1.容器

1.字符串的标识 字符串需要用“”标识。 与c不同&#xff0c;python 写变量时 不需要标明数据类型每一行最后不需要加&#xff1b; 2.print函数的使用 与c中的printf函数一致 3.运算符 4.字符串str操作 1. 实现字符串拼接 2.% 实现字符串初始化 %s占位会把变量强制转变为…

零基础上手Python数据分析 (2):Python核心语法快速入门

写在前面 场景:每周销售数据报表整理 任务描述: 你需要每周从多个Excel文件中汇总销售数据,计算各项指标(销售额、订单量、客单价等),并生成周报。Excel操作痛点: 文件太多,手动打开复制粘贴,效率低下,容易出错。 多个Excel文件,每个都要打开、筛选、复制数据,重复…

【PHP】获取PHP-FPM的状态信息

文章目录 一、前言二、环境三、过程1&#xff09;修改PHP-FPM配置文件2&#xff09;修改Nginx配置文件3&#xff09;访问页面4&#xff09;修改状态页面端口 一、前言 PHP-FPM内置有一个状态页面&#xff0c;通过这个页面可以获取到FPM的一些状态信息&#xff08;见下图&#…

搭建Spring Boot Admin监控系统

什么是Spring Boot Admin Spring Boot Admin 是一个用于管理和监控 Spring Boot 应用程序的开源工具。它提供了一个用户友好的 Web 界面&#xff0c;用于集中管理和监控多个 Spring Boot 应用程序的运行状态、健康状况、日志、配置等信息。 Spring Boot Admin 的核心功能 应用…

[CISCN 2022 初赛]ezpop(没成功复现)

打开在线环境可以看到&#xff1a; 记得之前做过一个类似的就是有点像照着漏洞去复现。应该可以直接在网上找到链子去打。 www.zip查看路由是 Index/test&#xff0c;然后 post 传参 a&#xff1a; exp&#xff08;参考了别的大神的wp&#xff09;&#xff1a; <?php //…

C 语 言 --- 二 维 数 组 的 应 用

C 语 言 --- 二 维 数 组 的 应 用 第 一 题 - - - 冒 泡 排 序冒 泡 排 序冒 泡 排 序 的 原 理 第 二 题 - - - 回 型 矩 阵特 点 第 三 题 - - - 蛇 形 矩 阵总结 &#x1f4bb;作者简介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你 入 门 C 语 言 &…

5G核心网实训室搭建方案:轻量化部署与虚拟化实践

5G核心网实训室 随着5G技术的广泛应用&#xff0c;行业对于5G核心网人才的需求日益增长。高校、科研机构和企业纷纷建立5G实训室&#xff0c;以促进人才培养、技术创新和行业应用研究。IPLOOK凭借其在5G核心网领域的深厚积累&#xff0c;提供了一套高效、灵活的5G实训室搭建方…

寄生虫仿生算法:基于寄生虫特征的算法设计

寄生虫仿生算法:基于寄生虫特征的算法设计 基于寄生虫行为特征的仿生算法设计 import random import numpy as npclass EnhancedPBOA:def __init__(self, host_env, max_generations, population_size50):self.host_env host_envself.max_generations max_generationsself.p…

【医学影像 AI】基于深度学习的 ROP 病变检测图像评估系统

【医学影像 AI】基于深度学习的 ROP 病变检测图像评估系统 0. 论文简介0.1 基本信息0.2 摘要 1. 引言2. 材料与方法2.1 研究人群2.2 疾病分类与参考标准的制定2.3 深度学习系统开发2.4 定量严重程度评分2.5 数据分析 3. 结果4. 讨论6. 参考文献 0. 论文简介 0.1 基本信息 201…

Cursor初体验:excel转成CANoe的vsysvar文件

今天公司大佬先锋们给培训了cursor的使用&#xff0c;还给注册了官方账号&#xff01;跃跃欲试&#xff0c;但是测试任务好重&#xff0c;结合第三方工具开发也是没有头绪。 但巧的是&#xff0c;刚好下午有同事有个需求&#xff0c;想要把一个几千行的excel转成canoe的系统变…

每日一题---单词搜索(深搜)

单词搜索 给出一个二维字符数组和一个单词&#xff0c;判断单词是否在数组中出现&#xff0c; 单词由相邻单元格的字母连接而成&#xff0c;相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。 数据范围&#xff1a; 0 < 行长度 < 100 0 < 列长度 <…

【深度学习】多源物料融合算法(一):量纲对齐常见方法

目录 一、引言 二、量纲对齐常见方法 2.1 Z-score标准化Sigmoid归一化 2.2 Min-Max 归一化 2.3 Rank Transformation 2.4 Log Transformation 2.5 Robust Scaling 3、总结 一、引言 类似抖音、快手、小红书等产品的信息流推荐业务&#xff0c;主要通过信息流广告、信…

用C++新建快捷方式

1.创建文件 新建一个文件Ink.cpp,系统会自动生成对应的EXE文件 2.编写代码 #include<stdlib.h> int main(){ system("powershell -command \"$WshShellNew-Object -comObject WScript.Shell; $Shortcut$WshShell.CreateShortcut(\%UserProfile%\\Desktop\\1.…

基于Python的天气预报数据可视化分析系统-Flask+html

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.8数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统登录 可视化界面 天气地图 天气分析 历史天气 用户管理 摘要 本文介绍了基于大数据…

基于Uniapp开发tab选项卡/标签栏前端组件

在开发一些业务场景时候&#xff0c;可能需要切换标签栏来展示不同的信息列表。 为此开发了一个Uniapp组件&#xff08;myTab&#xff09;&#xff0c;下面为组件的展示效果&#xff1a; 案例代码&#xff1a; <template><view class"content"><myt…

文本组件+Image组件+图集

Canvas部分知识补充 元素渲染顺序 以Hierarchy参考 下方物体在上方物体前显示 子物体在父物体前显示 下方物体永远在前显示&#xff0c;无论上方的层次结构 资源导入 绝对路径&#xff1a;C:\Windows\Fonts下的许多字体可以用做UIText的字体资源 图片导入&#xff1a; 1.图…