cmake学习_incomplete
文章目录
- cmake使用举例
- cmake示例模板
- 编译时库查找
- 基础知识
- 模块模式
- 导入目标
- 交叉编译配置
- 基础知识
- 模板
- 实际使用
- 使用实例
- 链接库
- 解决符号冲突
- 参考资料
老规矩,先放官方文档
如何构建从互联网下载的源代码包:User Interaction Guide
想使用第三方库的开发者:Using Dependencies Guide
使用cmake创建编译系统:CMake Tutorial
交叉编译章节:cmake cross-compiling
以下是一些零散判断的整理,等以后有空了再慢慢优化
cmake使用举例
一个典型的编译命令:
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENSSL_INCLUDE_DIR=/usr/local/openssl/include/ \
-DOPENSSL_SSL_LIBRARY=/usr/local/openssl/lib64/libssl.so \
-DOPENSSL_CRYPTO_LIBRARY=/usr/local/openssl/lib64/libcrypto.so \
-DLIBSSH_INCLUDE_DIRS=/usr/local/libssh/include/ \
-DLIBSSH_LIBRARIES=/usr/local/libssh/lib/libssh.so ..
对应文件:
drwxrwxr-x 12 wsl wsl 4096 Aug 16 20:13 libnetconf2-3.3.3
drwxrwxr-x 10 wsl wsl 4096 Aug 16 20:39 libssh-0.11.0
drwxrwxr-x 12 wsl wsl 4096 Aug 16 20:10 libyang-3.1.0
drwxrwxr-x 20 wsl wsl 4096 Aug 16 20:24 openssl-openssl-3.0.9
drwxrwxr-x 11 wsl wsl 4096 Aug 16 20:10 pcre2-pcre2-10.44
cmake示例模板
# cmake 的版本要求,不用修改
cmake_minimum_required(VERSION 3.0.0)# 修改 vsf_config 为自己的工程名
project(vsf_config VERSION 0.1.0)#支持自定义变量,比如指定平台
set(PLAT "ssc325")#指定编译器
set(CMAKE_C_COMPILER "arm-linux-gcc")# 源码路径,两种方式,均支持变量来控制子目录
#1、递归包含某目录及子目录的所有源码文件
file(GLOB_RECURSE PLAT_SRCS src/${PLAT}/*.c)
#2、不递归,只包含某文件夹下的文件
aux_source_directory(src/common COM_SRCS)# 添加头文件目录,支持用变量来区分平台
# Tips: 快速罗列 include 下子目录的方法
# find include/ -path "*.svn*" -prune -o -type d -print
include_directories(includeinclude/${PLAT}include/commoninclude/common/osainclude/ivfinclude/palinclude/vsf/config/include/vsf/include/vsf/drvinclude/sensor/src/config/${PLAT}/incinclude/pdi
)#添加宏定义
add_definitions(-DSVN_NUM=-1)
add_definitions(-DOSA_MODULE_NAME="${PROJECT_NAME}")#从源码生成静态库
add_library(${PROJECT_NAME} ${COM_SRCS} ${PLAT_SRCS})#生成 compile_commands.json ,不用修改
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
编译时库查找
基础知识
find_package有三种来查找依赖的包:模块模式,配置模式,内容获取重定向模式。模块模式中,会搜寻Find.cmake文件用来查找库。配置模式中,会查找-config.cmake 或 Config.cmake文件,这些文件一般是依赖包自身提供的,比如usr/lib/cmake/libssh/libssh-config-version.cmake
模块模式
使用find_package来查找库,以libyang依赖的libpcre2为例:
# find PCRE2 library
unset(PCRE2_LIBRARY CACHE)
find_package(PCRE2 10.21 REQUIRED)
include_directories(${PCRE2_INCLUDE_DIRS})
target_link_libraries(yang ${PCRE2_LIBRARIES})
CMake将尝试去寻找Find.cmake文件,在libyang的例子中FindPCRE2.cmake是开源包本身提供的。其中又进一步的使用find_path和find_library来查找头文件路径和库路径,并赋值到了相关变量中。怀疑这种方式是非交叉编译时使用的。
在交叉编译时,可能不使用开源包提供的Find.cmake文件,因此使用的是cmake自己的:/usr/local/share/cmake-3.30/Modules/FindOpenSSL.cmake
在结合了工具链文件进行交叉编译时,实际使用时会出现构建时,编译正常,链接报错:warning: libcrypto.so.3, needed by …/lib/libssh.so.4.10.0, not found (try using -rpath or -rpath-link)。将上层的CFLAGS与LDFLAGS引入解决了此问题。
CFLAGS=-I/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/usr/include
-I/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/usr/include/libxml2
-I/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include
LDLAGS=-L/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/lib
-L/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/lib64
-L/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/usr/lib
-L/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/usr/lib64
-Wl,-rpath-link=/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/lib
-Wl,-rpath-link=/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/lib64
-Wl,-rpath-link=/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/usr/lib
-Wl,-rpath-link=/home/344272/svn/GNOS/Trunk/src_2406/output/linux-arm64/usr/lib64
-L/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/lib
-L/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/lib64
-L/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/lib
-L/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/lib64
-Wl,-rpath-link=/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/lib
-Wl,-rpath-link=/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/lib64
-Wl,-rpath-link=/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/lib
-Wl,-rpath-link=/usr/local/xtools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/lib64
最终的mk文件如下:
3RD_LIBNETCONF2_VERSION := 3.3.3
3RD_LIBNETCONF2 := $(TARGET_BUILD_3RD)/libnetconf23RD_LIBNETCONF2_OPTS := -DCMAKE_INSTALL_PREFIX=$(3RD_INSTALL_PREFIX)
3RD_LIBNETCONF2_OPTS += -DCMAKE_BUILD_TYPE="Release"
3RD_LIBNETCONF2_OPTS += -DCMAKE_TOOLCHAIN_FILE=$(MK_ROOT)/aarch64-none-linux-gnu.toolchain.cmake3RD_UNINSTALL_SEPCIAL_TARGETS += 3rd-libnetconf23rd-libnetconf2:@$(call display_start,Build libnetconf2)$(Q)$(call decompress,$(@:3rd-%=%),$(3RD_LIBNETCONF2_VERSION),$(TARGZ))$(MKD) $(3RD_LIBNETCONF2)/$(CMAKEBUILDDIR)cd $(3RD_LIBNETCONF2)/$(CMAKEBUILDDIR) && CFLAGS="$(3RD_CFLAGS)" LDFLAGS="$(3RD_LDFLAGS)" cmake ../ $(3RD_LIBNETCONF2_OPTS)cd $(3RD_LIBNETCONF2)/$(CMAKEBUILDDIR) && make@$(call display_end,Build libnetconf2)uninstall-3rd-libnetconf2:@$(call display_start,Uninstall $(@:uninstall-3rd-%=%))-$(RM) $(3RD_INSTALL_PREFIX)/lib/libnetconf2.so*-$(RM) $(3RD_INSTALL_PREFIX)/lib/pkgconfig/libnetconf2c.pc-$(RM) $(3RD_INSTALL_PREFIX)/include/libnetconf2@$(call display_end,Uninstall $(@:uninstall-3rd-%=%))
导入目标
配置文件和Find模块文件都可以定义导入目标。这些目标通常具有形式为SomePrefix::ThingName的名称。如果有这些目标可用,工程应该优先使用它们,而不是可能提供的任何CMake变量。这些目标通常携带使用要求和应用诸如头文件查询路径、编译程序定义等的内容,自动应用到链接到它们的其他目标上(例如使用target_link_libraries())。这比尝试手动使用变量应用相同的内容更加稳健和方便。请查看包或Find模块的的文档,了解它定义了哪些导入目标(如果有的话)。
导入目标还应封装任何特定于配置的路径。这包括二进制文件(库、可执行文件)的位置、编译程序标志和任何其他配置相关的数量。与配置文件相比,Find模块在提供这些细节方面可能不太可靠。
一个比较复杂的查找并使用三方库的例子如下:
cmake_minimum_required(VERSION 3.10)
project(MyExeProject VERSION 1.0.0)# Make project-provided Find modules available
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")find_package(SomePackage REQUIRED)
add_executable(MyExe main.cpp)
target_link_libraries(MyExe PRIVATE SomePrefix::LibName)
请注意,上述调用find_package()的处理可以通过配置文件或Find机制来解决。它仅使用Basic签名支持的基本参数。例如,在${CMAKE_CURRENT_SOURCE_DIR}/cmake目录中的FindSomePackage.cmake文件可以使find_package()命令在机制模式下成功。如果没有这样的机制文件存在,则系统将搜索配置文件。
交叉编译配置
基础知识
如果使用cmake命令行参数–toolchain path/to/file或-DCMAKE_TOOLCHAIN_FILE=path/to/file调用cmake,文件将会被提前加载以收集编译器的值。当CMake进行交叉编译时,CMAKE_CROSSCOMPILING变量被设置为true。
请注意,在工具链文件中使用CMAKE_SOURCE_DIR或CMAKE_BINARY_DIR变量通常是不可取的。工具链文件在不同的上下文中使用这些变量时,这些变量的值会有所不同(例如,作为try_compile()调用的一部分)。在大多数情况下,在工具链文件中需要评估路径时,更合适的变量是CMAKE_CURRENT_LIST_DIR,因为它始终具有明确且可预测的值。
模板
一个典型的linux交叉编译工具链如下:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
set(CMAKE_STAGING_PREFIX /home/devel/stage)set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)#CMAKE_FIND_ROOT_PATH不能使用相对路径
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
解释:
CMAKE_SYSTEM_NAME
是要构建的目标平台的CMake标识符。
CMAKE_SYSTEM_PROCESSOR
是要构建的目标架构的CMake标识符。
CMAKE_SYSROOT
是可选的,如果有sysroot可用,则可以指定。
CMAKE_STAGING_PREFIX
也是可选的。它可以用于指定要安装到的路径。即使在交叉编译时,CMAKE_INSTALL_PREFIX始终是运行时安装位置。
CMAKE__COMPILER
变量可以设置为完整路径,或者设置为要在标准位置查询的编译器名称(即在PATH路径下的编译器名字,不用写路径了)。对于不支持在没有自定义标志或脚本的情况下链接二进制文件的工具链,可以将CMAKE_TRY_COMPILE_TARGET_TYPE变量设置为STATIC_LIBRARY,告诉CMake在其检查过程中不要尝试链接可执行文件。
CMake find_* 命令将在 sysroot 和 CMAKE_FIND_ROOT_PATH 条目中默认情况下查找,同时也会在被访问系统的根前缀中查找。虽然这可以在每种情况下进行控制,但在交叉编译时,可以排除在被访问系统或目标系统中查找特定的构件。通常,应该在目标系统前缀中找到头文件包含路径、库和软件包,而必须作为构建的一部分运行的可执行文件只应该在被访问系统上找到,而不是在目标系统上找到。这就是 CMAKE_FIND_ROOT_PATH_MODE_* 变量的目的。
实际使用
此cmake工具链文件可放在CMakeLists.txt同级目录下,交叉编译时,只需在非交叉编译命令中添加参数即可,比如原来是cmake …,交叉编译时命令为cmake -DCMAKE_TOOLCHAIN_FILE=…/toolchain.cmake … 。交叉编译进程和交叉编译三方库都是这个流程
使用实例
链接库
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Test)
set(GNOS_SRC "/Trunk/src_2406/")
link_directories(${GNOS_SRC}/output/linux-arm64/usr/lib ${GNOS_SRC}/output/linux-arm64/usr/lib64)
add_executable(test main.c)
include_directories(${GNOS_SRC}/output/linux-arm64/usr/include)
target_link_libraries(test netconf2 yang pcre2-8 curl ssh ssl crypto zstd pam audit cap-ng pthread z)
解决符号冲突
一个同时链接静态动态库的例子,使用了两个不同版本的同名函数
#CMakeLists.txt
cmake_minimum_required(VERSION 3.10)# 设置项目名称
project(MyProject)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") # 创建静态库
add_library(a2 STATIC liba2.c)# 创建静态库
add_library(a STATIC liba.c)
target_link_libraries(a PRIVATE a2)# 创建动态库
add_library(so2 SHARED libso2.c)# 创建动态库
add_library(so SHARED libso.c)
#-Wl,--exclude-libs,ALL会排除静态库所有符号
target_link_libraries(so PUBLIC -Wl,--exclude-libs,ALL so2)# 创建可执行文件
add_executable(my_executable main.c)# 链接库到可执行文件
target_link_libraries(my_executable PRIVATE a so)
# 添加安装规则
install(TARGETS my_executable DESTINATION .)
install(TARGETS a DESTINATION .)
install(TARGETS a2 DESTINATION .)
install(TARGETS so DESTINATION .)
install(TARGETS so2 DESTINATION .)# 指定安装目录
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/out")
对应文件:
$ find . -maxdepth 1 -name "*.c" -exec sh -c 'for file; do echo "==> $file <=="; cat "$file"; done' sh {} +
==> ./libso.c <==
extern int testc();
int testso()
{return testc();
}
==> ./liba2.c <==
int testc()
{return 1;
}
==> ./main.c <==
extern int testa();
extern int testso();
#include<stdio.h>int main()
{int ret = 0;ret = testa();printf("test : %d\n",ret);ret = testso();printf("test2 : %d\n",ret);return 0;
}
==> ./liba.c <==
extern int testc();
int testa()
{return testc();
}
==> ./libso2.c <==
int testc()
{return 2;
}
参考资料
一个交叉编译项目的模板:一个基于cmake跨平台交叉编译项目模板
一个交叉编译的例子:CMake应用:交叉编译
一个链接动态库交叉编译进程的例子:嵌入式linux: 使用Cmake交叉编译tslib库
额外的配置参数解释:CMake交叉编译配置 - Ricky.K - 博客园 (cnblogs.com)
关于系统变量与cmake变量,里面还包含了一个使用动态库的例子:CMake默认环境变量及选择编译器和设置编译器选项_cmake指定编译器-CSDN博客
CMAKE_SYSROOT和CMAKE_FIND_ROOT_PATH的区别:CMAKE_SYSROOT和CMAKE_FIND_ROOT_PATH的区别
cmake中add_library、target_link_libraries、include_directories的使用:cmake中add_library、target_link_libraries、include_directories的使用
CMake是不是阻碍了C++的发展?
全网最细的CMake教程!
CMake 良心教程,教你从入门到入魂
理解cmake 中 PRIVATE、PUBLIC、INTERFACE 的含义和用法
相关文章:
cmake学习_incomplete
文章目录 cmake使用举例cmake示例模板编译时库查找基础知识模块模式导入目标 交叉编译配置基础知识模板实际使用 使用实例链接库解决符号冲突 参考资料 老规矩,先放官方文档 如何构建从互联网下载的源代码包:User Interaction Guide 想使用第三方库的开发者:Using …...
过度与动画的区别?
过渡(Transition): 过渡效果是由元素的状态变化触发的,例如:当鼠标悬停在某个元素上、或当某个 CSS 属性值发生改变时。 必须指定起始状态和结束状态。过渡会在两者之间自动平滑过渡。 过渡的触发通常是用户交互或通过…...
tcpdump指南(1)
大家读完觉得有意义记得关注和点赞!!! tcpdump是一种在网络上转储流量的网络工具。 这篇文章服务器作为一些常用命令的指南。如需完整指南, 请参阅手册页,或在 Linux 计算机上。man tcpdump 1 基本选项 帮助摘要&#…...
Linux(Centos 7.6)网卡信息没有了问题处理
1.问题现象 虚拟机打开后,使用ifconfig查看IP信息,虚拟机默认的网卡名称是ens33,ifconfig没有看到相关问题,远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…...
基于SpringBoot的校园二手交易平台的设计与实现(源码+SQL+LW+部署讲解)
文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…...
springboot523基于Spring Boot的大学校园生活信息平台的设计与实现(论文+源码)_kaic
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本大学校园生活信息平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…...
week05_nlp大模型训练·词向量文本向量
1、词向量训练 1.1 CBOW(两边预测中间) 一、CBOW 基本概念 CBOW 是一种用于生成词向量的方法,属于神经网络语言模型的一种。其核心思想是根据上下文来预测中心词。在 CBOW 中,输入是目标词的上下文词汇,输出是该目标…...
FreeRTOS Lwip Socket APi TCP Server 1对多
源文件 /********************************************************************************* file lwip_tcp_driver.cpp* brief TCP Server implementation using LwIP******************************************************************************* at…...
SonarQube相关的maven配置及使用
一、maven 全局配置 <settings><pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups><profiles><profile><id>sonar</id><activation><activeByDefault>true</acti…...
【蓝桥杯选拔赛真题87】python输出字符串 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
目录 python输出字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python输出字符串 第十五届蓝桥杯青少年组python比赛选拔赛真题详细解析…...
嵌入式开发中的机器人表情绘制
机器人的表情有两种,一种是贴图,一钟是调用图形API自绘。 贴图效果相对比较好,在存储空间大的情况下是可以采用的。 自绘比较麻烦,但在资源和空缺少的情况下,也是很有用的。而且自绘很容易通过调整参数加入随机效果&…...
本机实现Llama 7B推理及部署
本机实现Llama 7B推理及部署 使用llamafile在Windows系统部署 部署步骤:首先从https://www.modelscope.cn/api/v1/models/bingal/llamafile-models/repo?Revision=master&FilePath=llamafile-0.6.2.win.zip下载llamafile并解压得到llamafile.exe文件, 再从https://www.…...
HarmonyOS NEXT 实战之元服务:静态案例效果---我的热门应用服务
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index import { authentica…...
二十三种设计模式-工厂方法模式
工厂方法模式是一种创建型设计模式,其核心思想是通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法模式将对象的实例化推迟到子类中进行,从而使得扩展变得容易,而不需要修改现有的代码,符合开闭原则&…...
硬件工程师面试题 21-30
把常见的硬件面试题进行总结,方便及时巩固复习。其中包括网络上的资源、大佬们的大厂面试题,其中可能会题目类似,加强印象即可。 更多硬件面试题:硬件工程师面试题 1-10硬件工程师面试题 11-20 21、单片机最小系统需要什么&#x…...
深度学习中的HTTP:从请求到响应的计算机网络交互
在现代深度学习应用中,HTTP(超文本传输协议)不仅仅是网页浏览的基础协议,它也在机器学习和人工智能的服务架构中扮演着至关重要的角色。本文将深入探讨HTTP在深度学习中的应用,并阐明它如何支持模型的训练、推理及API服…...
基于submitit实现Python函数的集群计算
一、项目介绍 Submitit是一款轻量级工具,旨在简化Python函数在Slurm集群上的提交过程。它不仅提供了对作业结果、日志文件等的无缝访问,更让开发者能够在本地执行与Slurm集群间切换自如,极大地提高了代码的可移植性和灵活性。 Slurm作为一种…...
开源GTKSystem.Windows.Forms框架:C# Winform跨平台运行深度解析
开源GTKSystem.Windows.Forms框架:C# Winform跨平台运行深度解析 一、跨平台框架的崛起 1.1 跨平台技术的现状与需求 在当今快速发展的科技时代,软件开发的需求日益多样化。随着移动设备和操作系统的不断涌现,开发者面临着前所未有的挑战&…...
uniapp Stripe 支付
引入 Stripe npm install stripe/stripe-js import { loadStripe } from stripe/stripe-js; Stripe 提供两种不同类型组件 Payment Element 和 Card Element:如果你使用的是 Payment Element,它是一个更高级别的组件,能够自动处理多种支…...
虚拟机用网线连其他设备(ROS多机网络配置)
电脑配置 把局域网的网线插入电脑,点击这边 配置以太网的IP 比如说我ROS主机的IP想设为192.168.144.10,那我笔记本的以太网IP可以设为192.168.144.8。 假设还有另外一个电脑(ROS从机),他的IP被设置未192.168.144.4…...
20241218-信息安全理论与技术复习题
20241218-信息安全理论与技术复习题 一、习题1 信息安全的基本属性是(D )。 A、机密性 B、可用性 C、完整性 D、上面 3 项都是 “会话侦听和劫持技术” 是属于(B)的技术。 A、 密码分析还原 B、 协议漏洞渗透 C、 应用漏洞分析与渗透 D、 D…...
家谱管理系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…...
音频进阶学习九——离散时间傅里叶变换DTFT
文章目录 前言一、DTFT的解释1.DTFT公式2.DTFT右边释义1) 复指数 e − j ω n e^{-j\omega n} e−jωn2)序列与复指数相乘 x [ n ] ∗ e − j ω n x[n]*e^{-j\omega n} x[n]∗e−jωn复指数序列复数的共轭正交正交集 3)复指数序列求和 3.DTF…...
pytorch 计算图中的叶子节点介绍
1. 什么是叶子节点? 在 PyTorch 的自动微分机制中,叶子节点(leaf node) 是计算图中: 由用户直接创建的张量,并且它的 requires_gradTrue。这些张量是计算图的起始点,通常作为模型参数或输入变…...
CSS系列(42)-- Backdrop Filter详解
前端技术探索系列:CSS Backdrop Filter详解 🎨 致读者:探索背景滤镜的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Backdrop Filter,这个强大的视觉效果特性。 基础效果 🚀 模糊效果 /…...
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(一)
****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 三、传统微调范式(Traditional Fine-Tuning Paradigm) 在这个范式中,首先在大量未标记的文本数据上预…...
ChatGPT 与 AGI:人工智能的当下与未来走向全解析
在人工智能的浩瀚星空中,AGI(通用人工智能)无疑是那颗最为璀璨且备受瞩目的星辰。OpenAI 对 AGI 的定义为“在最具经济价值的任务中超越人类的高度自治系统”,并勾勒出其发展的五个阶段,当下我们大多处于以 ChatGPT 为…...
Redis - 1 ( 11000 字 Redis 入门级教程 )
一:服务端高并发分布式结构演进之路 1.1 常见概念 概念定义生活例子类比应用(Application)/ 系统(System)为完成一整套服务的程序或一组相互配合的程序群。为完成一项任务而组成的由一个人或一群相互配合的人构成的团…...
python opencv的sift特征检测(Scale-Invariant Feature Transform)
sift 官方文档地址:https://docs.opencv.org/4.10.0/da/df5/tutorial_py_sift_intro.html 创建SIFT实例cv2.SIFT.create()特征检测sift.detect描述子sift.compute/sift.detectAndCompute画特征cv2.drawKeypoints 原图 特征点 代码 import cv2first ./12.pngsif…...
Xilinx FPGA的Bitstream比特流加密设置方法
关于Xilinx FPGA的Bitstream比特流加密设置方法更多信息可参阅应用笔记xapp1084。 使用加密bitstream分两个步骤: 将bitstream的AES密钥存储在FPGA芯片内将使用AES密钥加密的Bitstream通过SPI Flash或JTAG加载至FPGA芯片 AES密钥可以存储在两个存储区之一&#x…...
如何通过深度学习提升大分辨率图像预测准确率?
随着科技的不断进步,图像处理在各个领域的应用日益广泛,特别是在医疗影像、卫星遥感、自动驾驶、安防监控等领域中,大分辨率图像的使用已经成为了一项不可或缺的技术。然而,大分辨率图像带来了巨大的计算和存储压力,同…...
Oracle SqlPlus常用命令简介
参考资料 【SQL*Plus】SETシステム変数の設定前後の具体例 目录 一. 执行系命令1.1 执行系统命令1.2 执行sql脚本文件1.2.1 在数据库中执行sql脚本1.2.2 通过sqlplus执行sql脚本 二. show命令2.1 显示SqlPlus中的全部环境变量2.2 显示指定环境变量的设置 三. 时间显示3.1 set …...
【微服务】【Sentinel】认识Sentinel
文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。动图演示: 在微服务系统…...
C++并行处理支持库 之六
C并行处理支持库 之六 std::promise构造器APIs应用实例 通过使用Futures标准库,我们可以获取异步任务返回值,捕获异步任务引发的异常。异步任务就是在独立线程中启动运行的函数。 这些值以共享状态进行通信,其中异步任务可以写入其返回值&…...
Linux-frp_0.61.1内网穿透的配置和使用
下载frp frp官网 https://gofrp.org/zh-cn/docs/setup/ frp安装包下载地址 https://github.com/fatedier/frp/releases?page1 下载之后在服务器上 解压 tar -zxvf frp_0.61.1_linux_amd64.tar.gztar:一个用于压缩和解压缩的工具。-z:表示使用 gzi…...
SpringBoot集成ECDH密钥交换
简介 对称加解密算法都需要一把秘钥,但是很多情况下,互联网环境不适合传输这把对称密码,有密钥泄露的风险,为了解决这个问题ECDH密钥交换应运而生 EC:Elliptic Curve——椭圆曲线,生成密钥的方法 DH&…...
深度学习的魔法世界
技术文章:深度学习的魔法世界 引言 嘿,今天我们要一起探索一个非常酷的魔法世界——深度学习!这是一门让计算机变得超级聪明的科学。我们会用最简单的语言来解释深度学习的基本概念,让你们也能轻松理解。 一、深度学习的六大魔…...
【超级详细】Vue3项目上传文件到七牛云的详细笔记
概述 继上一篇笔记介绍如何绑定七牛云的域名之后,这篇笔记主要介绍了如何在Vue3项目中实现文件上传至七牛云的功能。我们将使用Cropper.js来处理图像裁剪,并通过自定义组件和API调用来完成整个流程。 这里直接给出关键部分js代码,上传之前要先…...
设计模式-建造者模式
在面向对象的设计中,建造者模式(Builder Pattern) 是一种常用的设计模式,它属于创建型模式,旨在将复杂对象的创建与其表示分离。通过该模式,我们可以一步一步地构造一个复杂的对象,避免构造函数…...
springboot+vue实现SSE服务器发送事件
思路 一个基于订阅发布机制的SSE事件。客户端可以请求订阅api(携带客户端id),与服务器建立SSE链接;后续服务器需要推送消息到客户端时,再根据客户端id从已建立链接的会话中找到目标客户端,将消息推送出去。…...
IDEA | SpringBoot 项目中使用 Apifox 上传接口
目录 1 安装 Apifox Helper 插件2 获取 Apifox 的 API 访问令牌3 IDEA 中设置 API 访问令牌4 IDEA 中上传接口5 常见问题5.1 如何自动设置目录名5.2 如何自动设置接口名5.3 如何更改上传位置 Apifox 官方指南: https://apifox.com/help/applications-and-p…...
SpringBoot基础二
扩展SpringBoot 扩展SpringBoot中的SpringMVC的默认配置 SpringBoot默认已经给我们做了很多SpringMVC的配置,哪些配置? 1、视图解析器ViewResolver 2、静态资料的目录 3、默认首页index.html 4、图标名字和图标所在目录,favicon.ico 5、类型转…...
力扣第129题:求根到叶子节点数字之和 - C语言解法
力扣第129题:求根到叶子节点数字之和 - C语言解法 题目描述 给定一个二叉树,求根到叶子节点的数字之和。 每条从根到叶子的路径都代表一个数字。例如,根到叶子路径 1->2->3 代表数字 123。返回所有路径数字之和。 示例 1࿱…...
图像处理-Ch7-小波函数
个人博客!无广告观看,因为这节内容太多了,有点放不下,分了三节 文章目录 多分辨率展开(Multi-resolution Expansions)序列展开(Series Expansions)尺度函数(Scaling Function)例:哈尔尺度函数(Haar scaling func)多分…...
Unity中实现转盘抽奖效果(一)
实现思路: 旋转转盘的z轴,开始以角加速度加速到角速度最大值,结束的时候,以角加速度减速使角速度减少到0,然后转盘z轴旋转的角度就是加上每秒以角速度数值大小,为了使角度不能一直增大,对360度…...
小程序基础 —— 07 创建小程序项目
创建小程序项目 打开微信开发者工具,左侧选择小程序,点击 号即可新建项目: 在弹出的新页面,填写项目信息(后端服务选择不使用云服务,开发模式为小程序,模板选择为不使用模板)&…...
Apache Commons Pool :介绍与使用
Apache Commons Pool :介绍与使用 什么是 commons-pool2? commons-pool2 是 Apache Commons 提供的一个开源对象池实现框架。它旨在为应用程序提供通用的对象池支持,方便开发者管理资源(如数据库连接、网络连接等)复…...
(二)编译原生SDK以及配置交叉编译链
文章目录 编译原生SDKLinuxSDK的安装第一步解压LinuxSDK第二步安装依赖软件第三步解压Buildroot的dl文件 Linux系统镜像编译、生成第一步 配置编译环境第二步 编译 LinuxSDK编译上面配置好的 环境配置编译 LinuxSDK配置内核选项配置 Buildroot编译 Qt 库 编译生成 Linux 系统镜…...
YK人工智能(三)——万字长文学会torch深度学习
2.1 张量 本节主要内容: 张量的简介PyTorch如何创建张量PyTorch中张量的操作PyTorch中张量的广播机制 2.1.1 简介 几何代数中定义的张量是基于向量和矩阵的推广,比如我们可以将标量视为零阶张量,矢量可以视为一阶张量,矩阵就是…...
【游戏设计原理】41 - 游戏的核心
1. 如何理解? 这条原理主要在讲述“游戏核心”这一概念的重要性及其在游戏开发中的作用。游戏的核心是指决定游戏整体玩法和体验的核心元素,它通常是游戏的主要机制、目标或动作方式。理解这一原理时,我们可以从以下几个层面来考虑ÿ…...