vscode c++ 环境配置(终极版)

news2024/11/17 3:33:41

1. window系统 c++ 环境配置

1.1 配置MinGw编译器

(1)下载mingw64

mingw64 的按照包,我已经放在百度网盘上了,搭建可自行下载:

链接: https://pan.baidu.com/s/1NoPGAYFuP5ysXTf8wtvbEA?pwd=wd6w 提取码: wd6w

(2)配置环境变量
将下载好的mingw64.zip解压,找到解压后bin文件所在路径
在这里插入图片描述
然后将bin所在路径,如我这里的D:\install\mingw64\bin 添加到系统环境变量中。
在这里插入图片描述
(3)验证是否安装成功
命令提示符中cmd窗口输入gcc -vgcc --version,若显示版本号则说明安装成功

在这里插入图片描述

1.2 配置C/C++环境

C++环境是通过c_pp_propertoes.json,launch.jsontasks.json三个文件配置的。
在这里插入图片描述

方法1 利用工具自动配置

本文介绍一种非常简单的环境配置方法,借助网上提供的vscode c++配置器来实现。

  • 在https://v4.vscch.tk/ 下载安装包
    在这里插入图片描述

  • 解压安装包,并点击vscch.exe 进行一步步按照;安装非常简单,按照默认安装方式即可。
    在这里插入图片描述
    该工具可以自动识别MinGW编译器的安装位置,如果没有添加到环境变量中,它会自动帮忙配置到环境变量。
    在这里插入图片描述

  • 如果未下载MinGW,它会提示你下载,然后帮忙自动配置环境变量。

  • 完成安装后,会自动在你选择的工作路径下,生成配置好的c_pp_propertoes.json,launch.jsontasks.json, 以及helloworld.cpp测试代码。可以运行,测试c++环境是否配置成功:
    在这里插入图片描述
    注意: 根据自动生成的json配置,只能在安装时指定的工作目录下,编写c++ code才有效,因此做了如下修改,这样将3个json拷贝到其他目录,也可以运行和调试c++程序。 将single file build改为build

launch.json的修改如下:
在这里插入图片描述
tasks.json的修改如下:
在这里插入图片描述

方法2 直接创建3个json文件

在项目目录上创建.vscode目录,并创建c_cpp_properties.json,launch.json,tasks.json,三个json文件的按照我提供的配置。
在这里插入图片描述
(1) c_cpp_properties.json

{
  "configurations": [
    {
      "compilerPath": "D:\\install\\mingw64\\bin\\g++.exe",
      "cppStandard": "c++17",
      "includePath": [
        "${{workspaceFolder}}/**"
      ],
      "intelliSenseMode": "windows-gcc-x64",
      "name": "Win32"
    }
  ],
  "version": 4
}

(2) launch.json

{
  "configurations": [
    {
      "MIMode": "gdb",
      "args": [],
      "cwd": "${fileDirname}",
      "env": {
        "PATH": "D:\\install\\mingw64\\bin;${env:PATH}"
      },
      "environment": [],
      "externalConsole": true,
      "internalConsosleOptions": "neverOpen",
      "miDebuggerPath": "D:\\install\\mingw64\\bin\\gdb.exe",
      "name": "build",
      "preLaunchTask": "build",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "request": "launch",
      "stopAtEntry": false,
      "type": "cppdbg"
    }
  ],
  "version": "0.2.0"
}

(3) tasks.json

{
  "options": {
    "env": {
      "Path": "D:\\install\\mingw64\\bin;${env:Path}"
    }
  },
  "tasks": [
    {
      "args": [
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "-std=c++17"
      ],
      "command": "D:\\install\\mingw64\\bin\\g++.exe",
      "group": {
        "isDefault": true,
        "kind": "build"
      },
      "label": "build",
      "presentation": {
        "clear": true,
        "echo": false,
        "focus": false,
        "panel": "shared",
        "reveal": "silent",
        "showReuseMessage": false
      },
      "problemMatcher": "$gcc",
      "type": "process"
    },
    {
      "args": [],
      "command": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "dependsOn": "single file build",
      "label": "run and pause",
      "options": {
        "env": {
          "Path": "D:\\install\\mingw64\\bin;${env:Path}"
        }
      },
      "presentation": {
        "clear": true,
        "echo": false,
        "focus": false,
        "panel": "shared",
        "reveal": "never",
        "showReuseMessage": false
      },
      "problemMatcher": [],
      "type": "pause-console"
    }
  ],
  "version": "2.0.0"
}

注意: 将这3个json文件中的D:\\install\\mingw64 路径设置为你本机自己的路径

1.3 C/C++环境测试

编写一个测试的helloworld.cpp,代码如下:


// 按下 F6 编译运行。
// 按下 F5 编译调试。
// 按下 Ctrl + Shift + B 编译。

#include <iostream>

int main() {
    // 在标准输出中打印 "Hello, world!"
    std::cout << "Hello, world!" << std::endl;
}

// 此文件编译运行将输出 "Hello, world!"。
// 按下 F6 后,你将在弹出的终端窗口中看到这一行字。

配置和代码见我已上传百度网盘:
链接:https://pan.baidu.com/s/13R79Wxn91Z4G7RCcXpr8fQ?pwd=xe2x
提取码:xe2x

参考: https://zhuanlan.zhihu.com/p/545908287?utm_id=0

2. linux系统 c++ 环境配置

2.1 配置详解

linux系统vsocde的配置和window系统配置基本上是一样的,通过c_pp_propertoes.json,launch.jsontasks.jsonsettings.json4个文件配置的c++环境

(1) settings.json

{
    "files.associations": {
        "*.cpp": "cpp",
        "*.cu": "cuda-cpp",
        "deque": "cpp",
        "string": "cpp",
        "vector": "cpp",
        "*.tcc": "cpp",
        "__hash_table": "cpp",
        "__split_buffer": "cpp",
        "__tree": "cpp",
        "array": "cpp",
        "bitset": "cpp",
        "initializer_list": "cpp",
        "iterator": "cpp",
        "map": "cpp",
        "queue": "cpp",
        "random": "cpp",
        "set": "cpp",
        "stack": "cpp",
        "string_view": "cpp",
        "unordered_map": "cpp",
        "utility": "cpp",
        "__atomic": "cpp",
        "__functional_base": "cpp",
        "__functional_base_03": "cpp",
        "__tuple": "cpp",
        "algorithm": "cpp",
        "chrono": "cpp",
        "type_traits": "cpp",
        "filesystem": "cpp",
        "functional": "cpp",
        "limits": "cpp",
        "memory": "cpp",
        "ratio": "cpp",
        "tuple": "cpp",
        "istream": "cpp",
        "ostream": "cpp",
        "future": "cpp",
        "cctype": "cpp",
        "clocale": "cpp",
        "cmath": "cpp",
        "cstdarg": "cpp",
        "cstddef": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cstring": "cpp",
        "ctime": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "atomic": "cpp",
        "hash_map": "cpp",
        "hash_set": "cpp",
        "bit": "cpp",
        "codecvt": "cpp",
        "complex": "cpp",
        "condition_variable": "cpp",
        "cstdint": "cpp",
        "list": "cpp",
        "unordered_set": "cpp",
        "exception": "cpp",
        "memory_resource": "cpp",
        "numeric": "cpp",
        "optional": "cpp",
        "system_error": "cpp",
        "fstream": "cpp",
        "iomanip": "cpp",
        "iosfwd": "cpp",
        "iostream": "cpp",
        "mutex": "cpp",
        "new": "cpp",
        "sstream": "cpp",
        "stdexcept": "cpp",
        "streambuf": "cpp",
        "thread": "cpp",
        "cfenv": "cpp",
        "cinttypes": "cpp",
        "typeindex": "cpp",
        "typeinfo": "cpp",
        "ios": "cpp",
        "__nullptr": "cpp",
        "__bit_reference": "cpp",
        "__node_handle": "cpp",
        "__locale": "cpp",
        "variant": "cpp"
    }
}

settings.json可以上面提供的配置,不需要修改。

(2) c_cpp_propertoes.json
c_cpp_propertoes.json:配置c++ 编译时的选项,包括编译器的路径、C/C++标注, 指定头文件的搜索路径(如opencv等)

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/include/**",
                "/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/cpp-packages/opencv4.2/include/**"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "gnu++11",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

配置includePath

"includePath": [
                "${workspaceFolder}/**",
                "/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/include/**",
                "/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/cpp-packages/opencv4.2/include/**"
            ],

includePath: 设置头文件的搜索路径,让编译器可以找打相应的头文件。

  • 第一项: "${workspaceFolder}/**"添加项目的工作路径作为头文件的搜索路径,此项默认添加
  • 第二项: 配置TensorRT部署时,需要依赖的头文件,包括tensorrt自身的、cuda、cudnn、protobuf下的头文件。(项目中如果不依赖TensorRTcuda则不需要配置)
ls  /home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/include/

可以看到依赖的一些头文件:
在这里插入图片描述
cd 到其中一个比如cuda,可以详细看到cuda包含的.h文件
在这里插入图片描述

  • 第三项:配置了依赖的opencv 头文件。(项目中如果不依赖与opencv,则不需要配置)

配置gcc编译器路径

 "compilerPath": "/usr/bin/gcc"   # 设置gcc编译器即可,不需要设置g++

通过ls /usr/bin,可以看到gcc, g++等编译器都在该目录下

指定C/C++语言标注版本

"cStandard": "gnu11",
"cppStandard": "gnu++11",

智能感知方式

"intelliSenseMode": "linux-gcc-x64"

(3) tasks.json
tasks.json:指定 编译时需要执行cmake命令, 并且在每次launch(debug)时,都会先运行运行tasks(这里指的是都会编译一遍)。

因此tasks下面label名需要和launch.json中的 "preLaunchTask"参数设置的一样,比如都是build

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make pro -j6"
        }
    ]
}
  • command: 执行cmake的命令,其中pro为可执行文件名(makefile中指定的生成可执行文件的名称),-j6表示6个进程同时执行,如果想编译快点,可以将数字设置的大一点。

(4) launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "program-debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/workspace/pro",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/workspace",
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "environment": [
                {
                    "name": "LD_LIBRARY_PATH", 
                    "value": "/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/lib64:/home/yuanwushui/anaconda3/lib:/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/py39:/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/cpp-packages/opencv4.2/lib:/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/lib:$LD_LIBRARY_PATH"
                }
            ],
            "setupCommands": [
                {
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build"
        }
    ]
}

launch.json设置c++ debug的选项。 "configurations"下面的配置参数说明如下:

  • program:指定编译好的可执行文件pro的路径, 其中pro是在makefile中指定输出可执行文件名。
    "program": "${workspaceFolder}/workspace/pro",

【图】

  • cwd: 为可执行文件所在目录
  • "externalConsole": 运行时,是否需要运行在外部的控制台。如果设为True的话,会再CMD控制台运行(windows),如果false,会运行在编译器所在控制台。默认设为false即可
  • miDebuggerPath: 指定调试器(gdb)的路径
  • environment: 配置环境变量。环境变量名为LD_LIBRARY_PATH,环境变量值通过value来指定。LD_LIBRARY_PATH主要用来指定需要一开的外部库文件的搜索路径。在vlaue中指定库文件的搜索路径,以:隔开。如项目需要依赖tensorrt,cuda,anaconda,opencv, 则需要添加这些依赖的库文件。注意value需要以:不同库的搜索路径隔开,最后需要以:$LD_LIBRARY_PATH结尾。
 "environment": [
	 {
	       "name": "LD_LIBRARY_PATH", 
	       "value": "/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/lib64:/home/yuanwushui/anaconda3/lib:/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/py39:/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/cpp-packages/opencv4.2/lib:/home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/lib:$LD_LIBRARY_PATH"
	   }
	],
  • setupCommands: 设置打印选项,如对print输出进行美化,保持默认即可,不需要修改
 "setupCommands": [
         {
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ],
  • preLaunchTask: Launch(debug)前需要依赖的task任务注意需要与tasks.json中任务的label设置的名称一致,比如都为build,不然无法调试和编译。通过设置该选项,在调试时不需要手动去编译可执行文件,系统通过preLaunchTask自动帮忙编译。
     "preLaunchTask": "build"

2.2 makefile详解

cc        := g++
name      := pro
workdir   := workspace
srcdir    := src
objdir    := objs
stdcpp    := c++11
cuda_home := /home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8
syslib    := /home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/lib
cpp_pkg   := /home/yuanwushui/anaconda3/lib/python3.9/site-packages/trtpy/cpp-packages  #opencv4.2
cuda_arch := 
nvcc      := $(cuda_home)/bin/nvcc -ccbin=$(cc)

# 定义cpp的路径查找和依赖项mk文件
cpp_srcs := $(shell find $(srcdir) -name "*.cpp")
cpp_objs := $(cpp_srcs:.cpp=.cpp.o)
cpp_objs := $(cpp_objs:$(srcdir)/%=$(objdir)/%)
cpp_mk   := $(cpp_objs:.cpp.o=.cpp.mk)

# 定义cu文件的路径查找和依赖项mk文件
cu_srcs := $(shell find $(srcdir) -name "*.cu")
cu_objs := $(cu_srcs:.cu=.cu.o)
cu_objs := $(cu_objs:$(srcdir)/%=$(objdir)/%)
cu_mk   := $(cu_objs:.cu.o=.cu.mk)

# 定义opencv和cuda需要用到的库文件
link_cuda      := cudart cudnn
link_trtpro    := 
link_tensorRT  := nvinfer nvinfer_plugin
link_opencv    := opencv_core opencv_imgproc opencv_imgcodecs
link_sys       := stdc++ dl protobuf
link_librarys  := $(link_cuda) $(link_tensorRT) $(link_sys) $(link_opencv)

# 定义头文件路径,请注意斜杠后边不能有空格
# 只需要写路径,不需要写-I
include_paths := src              \
    $(cuda_home)/include/cuda     \
	$(cuda_home)/include/tensorRT \
	$(cpp_pkg)/opencv4.2/include  \
	$(cuda_home)/include/protobuf

# 定义库文件路径,只需要写路径,不需要写-L
library_paths := $(cuda_home)/lib64 $(syslib) $(cpp_pkg)/opencv4.2/lib

# 把library path给拼接为一个字符串,例如a b c => a:b:c
# 然后使得LD_LIBRARY_PATH=a:b:c
empty := 
library_path_export := $(subst $(empty) $(empty),:,$(library_paths))

# 把库路径和头文件路径拼接起来成一个,批量自动加-I、-L、-l
run_paths     := $(foreach item,$(library_paths),-Wl,-rpath=$(item))
include_paths := $(foreach item,$(include_paths),-I$(item))
library_paths := $(foreach item,$(library_paths),-L$(item))
link_librarys := $(foreach item,$(link_librarys),-l$(item))

# 如果是其他显卡,请修改-gencode=arch=compute_75,code=sm_75为对应显卡的能力
# 显卡对应的号码参考这里:https://developer.nvidia.com/zh-cn/cuda-gpus#compute
# 如果是 jetson nano,提示找不到-m64指令,请删掉 -m64选项。不影响结果
cpp_compile_flags := -std=$(stdcpp) -w -g -O0 -m64 -fPIC -fopenmp -pthread
cu_compile_flags  := -std=$(stdcpp) -w -g -O0 -m64 $(cuda_arch) -Xcompiler "$(cpp_compile_flags)"
link_flags        := -pthread -fopenmp -Wl,-rpath='$$ORIGIN'

cpp_compile_flags += $(include_paths)
cu_compile_flags  += $(include_paths)
link_flags        += $(library_paths) $(link_librarys) $(run_paths)

# 如果头文件修改了,这里的指令可以让他自动编译依赖的cpp或者cu文件
ifneq ($(MAKECMDGOALS), clean)
-include $(cpp_mk) $(cu_mk)
endif

$(name)   : $(workdir)/$(name)

all       : $(name)
run       : $(name)
	@cd $(workdir) && ./$(name) $(run_args)

$(workdir)/$(name) : $(cpp_objs) $(cu_objs)
	@echo Link $@
	@mkdir -p $(dir $@)
	@$(cc) $^ -o $@ $(link_flags)

$(objdir)/%.cpp.o : $(srcdir)/%.cpp
	@echo Compile CXX $<
	@mkdir -p $(dir $@)
	@$(cc) -c $< -o $@ $(cpp_compile_flags)

$(objdir)/%.cu.o : $(srcdir)/%.cu
	@echo Compile CUDA $<
	@mkdir -p $(dir $@)
	@$(nvcc) -c $< -o $@ $(cu_compile_flags)

# 编译cpp依赖项,生成mk文件
$(objdir)/%.cpp.mk : $(srcdir)/%.cpp
	@echo Compile depends C++ $<
	@mkdir -p $(dir $@)
	@$(cc) -M $< -MF $@ -MT $(@:.cpp.mk=.cpp.o) $(cpp_compile_flags)
    
# 编译cu文件的依赖项,生成cumk文件
$(objdir)/%.cu.mk : $(srcdir)/%.cu
	@echo Compile depends CUDA $<
	@mkdir -p $(dir $@)
	@$(nvcc) -M $< -MF $@ -MT $(@:.cu.mk=.cu.o) $(cu_compile_flags)

# 定义清理指令
clean :
	@rm -rf $(objdir) $(workdir)/$(name) $(workdir)/*.trtmodel $(workdir)/*.onnx 
	@rm -rf $(workdir)/image-draw.jpg $(workdir)/input-image.jpg $(workdir)/pytorch.jpg

# 防止符号被当做文件
.PHONY : clean run $(name)

# 导出依赖库路径,使得能够运行起来
export LD_LIBRARY_PATH:=$(library_path_export)

2.3 案例说明

未完待续

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

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

相关文章

目标检测基础

MTCNN 人脸检测 MTCNN&#xff0c;Multi-task convolutional neural network&#xff08;多任务卷积神经网络&#xff09;&#xff0c;将人脸区域检测与人脸关键点检测放在了一起&#xff0c;它的主题框架类似于cascade。总体可分为P-Net、R-Net、和O-Net三层网络结构。这三个…

IOS工程使用OpenCV库完整步聚

1.打开Xcode15并点击Create New Project 2.引用编译好的opencv2.framework框架 选择添加其它库 选择Add Files ... 选择OpenCV源码编译生成输入的IOS平台的opencv2.framework库 opencv库要放在工程目录下,不然会找不到 成功添加opencv库的引用,现在可在工程中使用openc…

《网络安全0-100》多级安全

1.多级安全 建立安全模型的方法&#xff1a; 信息流模型 访问控制模型 1.1 BLP模型 1.1模型构建 不能下写、不能上读&#xff0c;保持数据的机密性。 例子&#xff1a;军事、商务、外交的机密性强场景。下级可以给上级进行汇报&#xff0c;但下级不能读取上级的作战计划…

【C++学习】C++入门 | 缺省参数 | 函数重载 | 探究C++为什么能够支持函数重载

写在前面&#xff1a; 上一篇文章我介绍了C该怎么学&#xff0c;什么是命名空间&#xff0c;以及C的输入输出&#xff0c; 这里是传送门&#xff1a;http://t.csdn.cn/Oi6V8 这篇文章我们继续来学习C的基础知识。 目录 写在前面&#xff1a; 1. 缺省参数 2. 函数重载 3…

浅谈【AI、算力赋能】“大算力”时代的到来

&#x1f53b;一、【&#x1f4a3; 话题引入&#xff1a;“AI算力最强龙头”&#xff0c;你怎么看&#xff1f;】 &#x1f648; AI人工智能是否可以取代人类&#xff1f;    &#x1f648; 应不应该限制人工智能的发展&#xff1f;      &#x1f648; AI研究及龙头行业迎…

011-从零搭建微服务-接口文档(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

【P2】VMware 下 docker 快速搭建漏洞靶场 DVWA

文章目录 一、docker 快速搭建漏洞靶场指南二、执行步骤三、为 kali 配置 docker 加速器四、访问 dockerhub 的 dvwa 镜像五、漏洞利用初探&#xff0c;修改 requests 请求参数远程执行命令六、vulhub 搭建漏洞复现 包括什么是 docker、docker 和虚拟机的的区别、docker 搭建 D…

阿里云服务器的虚拟化技术和资源隔离如何?是否支持私有云部署?

阿里云服务器的虚拟化技术和资源隔离如何&#xff1f;是否支持私有云部署&#xff1f;   一、阿里云服务器的虚拟化技术   阿里云服务器采用了业界领先的虚拟化技术&#xff0c;为用户提供了强大而灵活的计算性能。这主要体现在以下几个方面&#xff1a;   1.1 弹性伸缩 …

强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

【CMake 入门与进阶(13)】 CMake如何设置交叉编译(附代码)

cmake如果不设置交叉编译&#xff0c;默认情况下&#xff0c;会使用主机系统&#xff08;运行 cmake 命令的操作系统&#xff09;的编译器来编译我们的工程&#xff0c;那么得到的可执行文件或库文件只能在 Ubuntu 系统运行&#xff0c;如果我们需要使得编译得到的可执行文件或…

javaWeb医药管理系统

一、引言 二、项目截图 2.1 首页设计 2.2一级页面设计 2.2-1注册界面 2.2-2管理员登录界面 2.3二级页面设计 药品信息模块 药品销售 用户信息 三、项目基本要求 1.主要功能 医药管理系统的主要功能为&#xff1a;、药品更新、药品查询 药品更新功能分为三部分&…

前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input

前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13166 效果图如下&#xff1a; # cc-defineKeyboard #### 使用方法 使用方法 <!-- ref:唯一ref pas…

VMware vCenter Server 7.0 Update 3m 发布下载(重要安全更新)

VMware vCenter Server 7.0 Update 3m 发布下载&#xff08;重要安全更新&#xff09; 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vcenter-7-u3/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VMware vCente…

canvas详解07-裁剪

裁切路径 裁切路径和普通的 canvas 图形差不多,不同的是它的作用是遮罩,用来隐藏不需要的部分。如右图所示。红边五角星就是裁切路径,所有在路径以外的部分都不会在 canvas 上绘制出来。 如果和上面介绍的 globalCompositeOperation 属性作一比较,它可以实现与 source-in …

基于cycle of curves的Nova证明系统(2)

主要见斯坦福大学Wilson Nguyen、Dan Boneh和微软研究中心Srinath Setty 2023年论文《Revisiting the Nova Proof System on a Cycle of Curves》。 前序博客见&#xff1a; 基于cycle of curves的Nova证明系统&#xff08;1&#xff09; 5. IVC Proof进一步压缩 本文提出了…

【Rust】1、实战:语法和数据结构、生命周期-所有权-借用、自制 CPU、内存、文件

文章目录 零、Rust 好用的资源一、概述1.1 安全性1.1.1 垂悬指针1.1.2 数据竞争1.1.3 迭代器失效 1.2 性能1.3 vscode 設置 二、基础语法2.1 循环2.2 引用2.3 生命周期2.4 泛型2.5 实战grep项目2.6 数组2.6.1 数组和切片2.6.2 动态数组2.6.3 初始化 2.7 包含第三方库2.8 命令行…

深入理解深度学习——BERT(Bidirectional Encoder Representations from Transformers):输入表示

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff1a;基础知识 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09…

【Linux】MySQL 高级 SQL 语句 (一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MySQL 高级 SQL 语句 MySQL 高级(进阶) SQL 语句SELECT&#xff1a;显示表格中一个或数个字段的所有数据记录DISTINCT&#xff1a;不显示重复的数据记录WHERE&#xff1a;有条…

CVE-2022-25411

文章目录 CVE-2022-25411一、漏洞介绍二、渗透步骤1、打开网站2、目录扫描3、访问后台4、添加文件后缀5、上传shell6、查看flag值 CVE-2022-25411 一、漏洞介绍 Maxsite CMS文件上传漏洞。 MaxSite CMS是俄国MaxSite CMS开源项目的一款网站内容管理系统。马克斯程序(MaxCMS)以…

【Syncfusion系列】SfDataGrid 轻松实现分页和Excel导出

前言 Syncfusion 封装了一个控件 SfDataGrid &#xff0c;通过SfDataGrid我们只需要 极少量 代码就能分页和Excel导出。 效果展示 包安装 安装下面三个包 将表格绑定到数据库 这次我使用的是一个本地的小型数据库&#xff1a;sqlit 我通过 sqlit-net 这个包 进行访问 sqlit…