音视频开发4-补充 FFmpeg 开发环境搭建 -- 在windows 上重新build ffmpeg

本节的目的是在windows 上 编译 ffmpeg 源码,这样做的目的是:在工作中可以根据工作的实际内容裁剪 ffmpeg,或者改动 ffmpeg 的源码。

第一步 :下载, 安装,配置 ,运行 msys64

下载 

下载地址: https://www.msys2.org/
MSYS2 (Minimal SYStem 2)是⼀个MSYS的独⽴改写版本,主要⽤于 shell 命令⾏开发环境。同时它也 是⼀个在Cygwin(POSIX 兼容性层) 和 MinGW-w64(从"MinGW-⽣成")基础上产⽣的,追求更好的互操 作性的 Windows 软件。
MSYS2 是MSYS的⼀个升级版,准确的说是集成了panman和Mingw-64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 ⼯具链。与MSYS最⼤的区别是移植了Arch linux的软件包管理系统Pacman(其实是与Cygwin的区别)。

安装 配置

1. 下载安装MSYS2(按照官⽹安装到⾃⼰指定的⽬录下,本⼈安装于C:/msys64new)
2. 安装完成之后,先把安装⽬录下的msys2_shell.cmd中注释掉的
rem set MSYS2_PATH_TYPE=inherit 改成 set MSYS2_PATH_TYPE=inherit ,这是为了将vs的环境继 承给MSYS2。
本节测试中安装在 C:\msys64new

MSYS2可以选择msys或者MinGW-w64环境来编译,不过在msys下使⽤gcc编译出来的exe和dll依赖 msys-2.0.dll,⽽MinGW-w64下编译出来的⽂件不需要依赖这个dll,从程序的运⾏效率来看,不依赖这 个dll的程序的效率应该更⾼。所以选择MinGW-w64来编译更佳。

配置-修改pacman的源 - 在最新的msys64中已经不用改动,改动后反而有错误

pacman是⼀个软件包管理器,⽤来在MSYS2中安装软件,但是默认的国外的源下载安装包时⾮常缓慢, ⼤概只有⼗⼏⼆⼗KB的速度,⽽且还容易下载中断出错,所以需要修改为国内源,国内源可以选择中科⼤ 的源。
按照MSYS2镜像提示修改。具体如下:
编辑 /etc/pacman.d/mirrorlist.mingw32 ,在⽂件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

编辑 /etc/pacman.d/mirrorlist.mingw64 ,在⽂件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
编辑 /etc/pacman.d/mirrorlist.msys ,在⽂件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

运行 msys2_shell.cmd -mingw64

1. 启动命令⾏窗⼝,在窗⼝中输⼊:

在cmd模式下 进⼊msys2安装⽬录


cd c:\msys64
#如果要打开msys2的mingw64窗⼝
msys2_shell.cmd -mingw64
#如果要打开msys2的msys窗⼝
#msys2_shell.cmd

2. 然后在msys2的shell中执⾏:

pacman -Sy
目的是 : 刷新软件包数据。

二 安装编译环境

gcc编译器、git等
msys2 遇到两类开发环境:
1. MSYS2 ⾃带的开发环境,安装的包叫 msys2-devel
2. MinGW-w64 的安装
17 这两者有什么区别呢?
⼀⾔以蔽之,前者编译出来的可执⾏⽂件,要依赖 MSYS2 提供的动态链接库,⽽后者不需要。下⾯详细
说明⼀下:
(1) MSYS2 下的 gcc 编译环境,编译的可执⾏⽂件要依赖于 msys-2.0.dll,这个 DLL 提供了 Linux
下编程的提供的函数和接⼝,例如 fork 函数。
这个编译环境对于编译基于 Linux 下编写的软件,是⾮常适合的。例如编译 GNU 提供的各种⼯具。例
如,你想编译最新版本的 GNU grep ⼯具,MSYS2 下的这个环境是⾮常适合的。
(2)⽤ MinGW64 的编译环境, 不再依赖于 msys-2.0.dll,如果源代码就是基于 windows 开发的,那
使⽤ MinGW 的编译环境⽐较好,编译出来的可执⾏⽂件,不⽤再依赖 MSYS 提供的动态链接库。当然,
前提是代码中不能使⽤ Linux 的东⻄,即 POSIX 的那套东⻄。

1  编译工具链

pacman -S mingw-w64-x86_64-toolchain

2  编译工具

pacman -S git
pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl

pacman -S libtool
pacman -S mingw-w64-i686-cmake
pacman -S pkg-config
pacman -S mingw-w64-x86_64-SDL2


pacman -S mingw-w64-x86_64-yasm

编译当前最新x264时需要⽤到nasm。

pacman -S nasm

查看结果 which cl link yasm cpp

看返回结果, 没有no的结果⼀般就没问题。

3  编译第三⽅库

将下载下的放置于/home/用户名/ffmpeg下,本次用户名为Administrator,因此会放在 /home/Administrator/ffmpeg下,把第三⽅库编译的库⽂件放在 /home/Administrator/ffmpeg/build。
查看当前路径:
Administrator@DESKTOP-SU7G9P3 MINGW64 ~
# pwd
/home/Administrator

mkdir ffmpeg
cd ffmpeg

3.1 下载x264,生成动态库文件,静态库文件

git clone http://git.videolan.org/git/x264.git

cd进入到 x264 目录下
cd x264

./configure --prefix=/home/Administrator/ffmpeg/build/libx264 --host=x86_64-w64-mingw32 --enable-shared --enable-static --extra-ldflags=-Wl,--output-def=libx264.def

make

make install

⽣成libx264.lib
cp ./libx264.def /home/Administrator/ffmpeg/build/libx264/lib/

cd /home/Administrator/ffmpeg/build/libx264/lib

#若要生成64位lib文件则输入如下命令:
lib /machine:X64 /def:libx264.def
#若要生成32位lib文件则输入如下命令:
lib /machine:i386 /def:libx264.def
缘由:

因为要借助mingw64来编译一个第三方库,需要编译成Windows所需的lib文件,

其中执行到一条命令:

lib /machine:X64 /def:libx264.def

结果出现错误:

bash: lib command not found

最开始以为是libtool出了问题,后来发现整个msys64目录下没有lib.exe,

然后就想到了Visual Studio自带的lib.exe。

解决办法:

把Visual Studio自带lib.exe的所在目录添加到环境变量Path当中

请注意上面是64位的,请注意要根据实际路径来添加。

添加完毕之后,记得要重启mingw64

然后使用cmd 命令,进入到C:\msys64new\home\Administrator\ffmpeg\build\libx264\lib

执行  lib /machine:X64 /def:libx264.def

3.1.1 制作3rd库

新建lib264文件夹,拷贝libx264-158.dll 到文件夹下,并命名为libx264.dll 新建include和lib目录,分别将x264.h、x264_config.h拷贝到include目录,libx264.lib拷贝到lib目录下

libx264官⽹下载
https://www.videolan.org/developers/x264.html

3.2 下载和编译fdk-aac

下载fdk-aac

cd /home/Administrator/ffmpeg

git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git

cd fdk-aac

./autogen.sh

./configure --prefix=/home/Administrator/ffmpeg/build/libfdk-aac --enable-static --enable-shared


make -j4

make install

libfdk_aac官⽹下载
https://sourceforge.net/projects/opencore-amr/files/fdk-aac/

3.3下载编译mp3

cd /home/Administrator/ffmpeg

git clone --depth 1 https://gitee.com/hqiu/lame.git

cd lame

./configure --prefix=/home/Administrator/ffmpeg/build/libmp3lame --disable-shared --disable-frontend --enable-static
make
make install

libmp3lame官⽹下载(选择版本>= 3.98.3
https://sourceforge.net/projects/lame/files/lame/

3.4 下载编译libvpx

cd /home/Administrator/ffmpeg
git clone --depth 1 https://github.com/webmproject/libvpx.git
cd libvpx
./configure --prefix=/home/Administrator/ffmpeg/build/libvpx --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make -j4
make install

4.下载和编译ffmpeg

下载 ffmpeg 源码,可以直接从ffmpeg网站上直接下载,下载后解压。
https://ffmpeg.org/releases/ffmpeg-7.0.tar.xz
cd /home/Administrator/ffmpeg
./configure \
--prefix=/home/Administrator/ffmpeg/build/ffmepg-7.0 \
--arch=x86_64 \
--enable-shared \
--enable-gpl \
--enable-libfdk-aac \
--enable-nonfree \
--enable-libvpx \
--enable-libx264 \
--enable-libmp3lame \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libfdk-aac/include" \
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libfdk-aac/lib" \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libvpx/include" \
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libvpx/lib" \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libx264/include" \
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libx264/lib" \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libmp3lame/include"\
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libmp3lame/lib"
make -j8
make install
如上在测试的时候,第一天下午到晚上,始终发生问题,提示 lame的版本要>=38.6,但是第二天就好了,原因未知,记录在案。
这时候如果我们在windows上通过cmd命令形式调用ffmpeg,会提示各种dll 找不到。

此时bin目录中的ffmpeg、ffprobe、ffplay还是没法使用的,因为缺少相关的dll,需要从%MSYS2_HOME%/mingw64/bin中拷贝,或者将%MSYS2_HOME%/mingw64/bin配置到环境变量Path中。

需要拷贝的dll有:libwinpthread-1、SDL2、zlib1.dll、liblzma-5、libbz2-1、libiconv-2、libgcc_s_seh-1、libstdc++-6、libx265、libx264-159、libfdk-aac-2  ,  libva_win32.dll

从 C:\msys64new\mingw64\bin 中拷贝数据到 C:\msys64new\home\Administrator\ffmpeg\build\ffmepg-7.0\bin

---------------------------------------------------------

三,另一种安装方案。

参考博客如下:

https://www.cnblogs.com/mjios?page=3

下载安装MSYS2

进入MSYS2官网下载安装包(我这边下载的是:msys2-x86_64-20210228.exe),然后进行安装。

安装完毕后打开命令行工具mingw64.exe

安装依赖

pacman(Package Manager)是一个包管理工具。

  • pacman -Sl:搜索有哪些包可以安装
  • pacman -S:安装
  • pacman -R:卸载
pacman -Sy
目的是 : 刷新软件包数据

# 编译工具链
pacman -S mingw-w64-x86_64-toolchain
 
pacman -S mingw-w64-x86_64-yasm
 
pacman -S mingw-w64-x86_64-SDL2
 
pacman -S mingw-w64-x86_64-fdk-aac
 
pacman -S mingw-w64-x86_64-x264
 
pacman -S mingw-w64-x86_64-x265  这个不会有build error ,但是执行的时候,提示x265.dll找不到 中的某一个路径找不到,因此也不安装了

pacman -S mingw-w64-x86_64-libmp3lame  这个好像不行,使用pacman -Sl 查找并没有libmp3lame相关的,有一个是 mingw-w64-x86_64-gimp3,但是不知道是否就是libmp3lame,这应该也是为什么在这种安装方式下,参考中的博客没有将mp3弄进去的原因


 
# 需要单独安装make

pacman -S make

关于软件包相关的默认路径:

下载目录:%MSYS2_HOME%/var/cache/pacman/pkg
安装目录:%MSYS2_HOME%/mingw64
%MSYS2_HOME%是指MSYS2的安装目录

cd /C/msys64new/home/Administrator/ffmpeg/ffmpeg-7.0


./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl  --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265

按照 如上有运行时异常,总是说libx265.dll有问题,错误如下,

这块找了好久也没有找到方案解决,因此直接 将 --enable-libx265 删除了,重新build 了一版 

./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl  --enable-nonfree --enable-libfdk-aac --enable-libx264 


此时bin目录中的ffmpeg、ffprobe、ffplay还是没法使用的,因为缺少相关的dll,需要从%MSYS2_HOME%/mingw64/bin中拷贝,或者将%MSYS2_HOME%/mingw64/bin配置到环境变量Path中。

需要拷贝的dll有:libwinpthread-1、SDL2、zlib1.dll、liblzma-5、libbz2-1、libiconv-2、libgcc_s_seh-1、libstdc++-6、libx265、libx264-159、libfdk-aac-2  ,  libva_win32.dll

从 C:\msys64new\mingw64\bin 中拷贝数据到 C:\msys64new\usr\local\ffmpeg\bin

总结:

将 C:\msys64new\mingw64\bin 中的相关dll 拷贝到C:\msys64new\usr\local\ffmpeg\bin

将C:\msys64new\usr\local\ffmpeg\bin 设置为环境变量

四,安装QT,以及配置QT

下载

本教程中选择5.14.2版本(从5.15版本开始是收费版本)。

  • 下载地址:Index of /archive/qt/5.14/5.14.2
  • Windows系统选择下载:qt-opensource-windows-x86-5.14.2.exe

勾选MinGW 64bit编译器(我电脑的系统是64bit)。

如果后期想阅读Qt源码,就选择勾选Qt源码。

默认已经勾选了QtCreator。

解决控制台中文乱码

工具 -> 选项

文本编辑器 -> 行为 -> 文本编码 -> 默认编码。

每次运行Qt程序,你的控制台可能都会出现以下警告信息:QT_DEVICE_PIXEL_RATIO已经过期。

Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use:
   QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors.
   QT_SCREEN_SCALE_FACTORS to set per-screen DPI.
   QT_SCALE_FACTOR to set the application global scale factor.

解决方案:设置环境变量QT_SCALE_FACTOR为1即可。

 
#include "mainwindow.h"
 
#include <QApplication>
 
// 导入头文件【也可以不导入,因为<QApplication>中已经包含了<QByteArray>】
// #include <QByteArray>
 
int main(int argc, char *argv[]) {
    // 通过qputenv函数设置QT_SCALE_FACTOR为1
    qputenv("QT_SCALE_FACTOR", QByteArray("1"));
 
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

集成FFmpeg到Qt项目中

在Windows中,我们最终是通过调用FFmpeg动态库(dll)中的函数来操作音视频数据,使用dll的其中一种方式是需要用到3种文件:

  • .h:头文件(Header File)
    • 包含了函数的声明
    • 通过#include去导入相应的头文件
  • .dll:动态链接库(Dynamic Link Library)
    • 包含了函数的具体实现代码
    • Windows程序会在运行过程中,动态调用dll中的函数
  • .lib.dll.a:(动态链接库的)导入库(Import Library)
    • .lib:用于MSVC编译器中
    • .dll.a:用于MinGW编译器中
    • 包含了dll中函数的入口,用于辅助找到并调用dll中的函数
    • 最终需要链接到Windows程序中(比如合并到exe文件中)

值得一提的是,在Windows中,静态链接库(Static Link Library)的扩展名也是.lib.dll.a。静态链接库和导入库的区别是:

  • 静态链接库:包含了函数的具体实现代码
  • 导入库:不包含函数的具体实现代码(函数的具体实现代码存储在dll中)

修改.pro文件

# 设置头文件的目录,以便编译器能够找到头文件
INCLUDEPATH += %FFMPEG_HOME%/include
# 设置导入库的目录和需要链接的导入库
LIBS += -L%FFMPEG_HOME%/lib \
        -lavcodec \
        -lavdevice \
        -lavfilter \
        -lavformat \
        -lavutil \
        -lpostproc \
        -lswscale \
        -lswresample

#号后面的内容是注释
%FFMPEG_HOME%表示ffmpeg-4.3.2-2021-02-27-full_build-shared.7z解压后的目录
需要根据你的实际情况修改为真实的路径
-L:设置导入库的目录,以便编译器能够找到导入库
-l:设置需要链接的导入库名称
导入库名称需要去掉文件名前面的lib,比如libavcodec.dll.a就写成avcodec

调用函数

main.cpp中调用av_version_info函数,获取FFmpeg的版本信息。

 
#include "mainwindow.h"
 
#include <QApplication>
 
// 为了使用qDebug函数
#include <QDebug>
 
// FFmpeg是C语言库
// 有了extern "C",才能在C++中导入C语言函数
extern "C" {
#include <libavcodec/avcodec.h>
}
 
int main(int argc, char *argv[]) {
    // 打印版本信息
    qDebug() << av_version_info();
    
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

拷贝dll文件

Qt程序编译成功后,会生成一个exe文件

exe是Windows中的一种可执行文件
我们编写的程序代码最终都存在了exe文件中
为了保证exe在运行时能成功调用FFmpeg的函数,那么就得让exe能够找到FFmpeg的dll文件(动态库文件)。可以将%FFMPEG_HOME%/bin目录中的所有dll文件拷贝到exe文件所在的目录中,exe在运行的时候,能自动找到跟它同一目录下的dll文件。

可以通过查看构建目录得知exe文件所在的目录。

运行程序后,如果能在控制台看到当前ffmepg 的版本信息 字样的输出信息,说明FFmpeg已经集成成功。

问题记录:

这里实际测试中还有一个问题,先记录一下,但是原因暂时不知道:

实际开发中 只有使用 MinGW 64-bit这个才能build pass,并运行成功,使用其他的三个都有build error

假设我们开发好程序要给 user 的windows电脑上使用,那么user是不一定装过ffmpeg,或者SDL的,因此我自己觉得好的做法,应该是如下的

在 03Recordaddtimer_home的 .pro文件中的写法如下
INCLUDEPATH += ../include
DEPENDPATH += ../include


LIBS += -L../lib \
        -lavcodec \
        -lavdevice \
        -lavfilter \
        -lavformat \
        -lavutil \
        -lpostproc \
        -lswresample \
        -lswscale

这样就能将.h文件 引入,将动态库索引引入。

在执行的时候,还是会遇到 找不到各种dll的问题。

因此还需要将真正的dll文件放在 程序运行的exe 同一目录下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ssh将vscode 连接到服务器上,手把手指导

一、背景 我们在开发时&#xff0c;经常是window上安装一个vscode编辑器&#xff0c;去连接一个虚拟机上的linux&#xff0c;这里常用的是SSH协议&#xff0c;了解其中的操作非常必要。 二、SSH协议 SSH&#xff08;Secure Shell&#xff09;是一种安全协议&#xff0c;用于…

某某某加固系统分析

某某某加固系统内核so dump和修复&#xff1a; 某某某加固系统采取了内外两层native代码模式&#xff0c;外层主要为了保护内层核心代码&#xff0c;从分析来看外层模块主要用来反调试&#xff0c;释放内层模块&#xff0c;维护内存模块的某些运行环境达到防止分离内外模块&am…

vulnhub靶机De-ICE_S2.100_(de-ice.net-2.100-1.0)

下载地址&#xff1a;https://download.vulnhub.com/deice/De-ICE_S2.100_%28de-ice.net-2.100-1.0%29.iso 靶机搭建 注意下载下来的是iso文件接下来说明系统选择 linux的Debian 7.x就可以 然后注意一点我们需要创建一个192.168.2.0/24的网卡进行连接&#xff08;靶机ip地址…

RTOS(3)极简ARM架构与汇编

1.掌握八条汇编指令即可 读内存loadLDR R0&#xff0c;[addrA]写内存storeSTR R0&#xff0c;[addrA]加ADD R0&#xff0c;R1&#xff0c;R2减SUB R0&#xff0c;R1&#xff0c;R2比较CMP R0&#xff0c;R1跳转B / BL入栈PUSH { R3&#xff0c;LR }出…

OpenStack平台Glance管理

1. 规划节点 使用OpenStack平台节点规划。 IP主机名节点192.168.100.10controller控制节点192.168.100.20compute计算节点 2. 基础准备 使用实战案例-部署的OpenStack平台。 IP 主机名 节点 192.168.100.10 controller 控制节点 192.168.100.20 copute 计算节点 02 案例分…

基于机器学习判断面部微表情发现哪些人更容易诊有帕金森病

1. 概述 帕金森病&#xff08;Parkinson’s disease&#xff0c;PD&#xff09;是一种慢性、进展性的神经退行性疾病&#xff0c;主要影响运动系统。该病症以大脑中黑质致密部多巴胺能神经元的逐渐丧失为特征&#xff0c;导致多巴胺&#xff08;一种重要的神经递质&#xff09…

门禁-jenkins的构建状态同步到gitlab提交流水线

API接口文档 https://docs.gitlab.cn/jh/api/commits.html 配置pipline流水线 生成http请求代码&#xff1a; 使用HttpRequest插件生成 - sharelibs内容 //这是share libs里的 package devopsdef httpReq(reqType, reqUrl, reqBody, accessToken){def gitServer "…

Radware Alteon负载均衡-配置证书组

证书组&#xff1a;可以使用证书组将多个服务器证书与虚拟服务相关联。这提供了对服务器名称指示(Server Namelndication&#xff0c;SNI)的支持&#xff0c;允许在相同的IP和端口后面托管多个主机名。使用SNI&#xff0c;浏览器发送请求的主机名&#xff0c;使服务器能够在进行…

滤波电路应用笔记

滤波器 什么是滤波器&#xff1f; 滤波器是一种使某些频率或频带上的电信号通过而阻止其他信号通过的装置。 滤波电路的作用是尽可能减少脉动直流电压中的交流分量&#xff0c;保持其直流分量&#xff0c;降低输出电压的纹波系数&#xff0c;并使波形相对平滑。整流电路的输出…

以前:不会用电脑;现在:不会用AI

购买特价商务机票需要一些策略和灵活性。、 提前规划&#xff1a;商务舱票价通常在出发日期的2-3个月前最便宜。尽早规划您的行程并开始关注票价。 使用比价工具&#xff1a;使用Skyscanner、Kayak等比价网站来比较不同航空公司的商务舱票价。这些网站可以显示多个航空公司的价…

grpc、多集群、多租户

gRPC和服务发现 一个A high-performance, open-source universal RPC framework&#xff0c;高性能、开源的通用 RPC 框架。使用protobuf 语言基于文件定义服务&#xff0c;通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub。移动端上面则是基于标准的 HTTP…

使用Java 将字节数组转成16进制的形式

概述 在很多场景下&#xff0c;需要进行分析字节数据&#xff0c;但是我们存起来的字节数据一般都是二进制的&#xff0c;这时候就需要我们将其转成16进制的方式方便分析。比如在做音视频的时候&#xff0c;需要看下我们传输的视频h264数据中是否有对应的I帧或者B帧等数据&…

01JAVA基础

目录 1.基础语法 1.1 注释 1.2 关键字 1.3 常量 1.4 数据类型 1.5 变量 1.6 标识符 1.7 类型转换 2.算数运算符和分支语句 2.1 算数运算符 1.常规运算符 2.赋值运算符 3.自增自减 4.关系运算符 5.逻辑运算符 6.三元运算符 2.2 数据输入(Scanner) 2.3 分支判断…

自定义类型:结构体详解

1.结构体 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。一个整型数组&#xff0c;它的每个数组元素只能是整型&#xff0c;字符型的数组它的每个元素只能是字符型。但是结构体的每个成员可以是各种不同类型的变量。 1.2结构的声明 //声明 struct t…

【java程序设计期末复习】chapter1 java入门

java入门 java的特点 &#xff08;1&#xff09;简单 Java要比C简单&#xff0c;C中许多容易混淆的概念&#xff0c;或者被Java弃之不用了&#xff0c;或者以一种更清楚更容易理解的方式实现 &#xff08;2&#xff09;面向对象 Java是面向对象的编程语言 &#xff08;3&…

【数据结构(邓俊辉)学习笔记】二叉树02——遍历

文章目录 0.概述1. 先序遍历1.1 递归版1.1.1 实现1.1.2 时间复杂度1.1.3 问题 1.2 迭代版11.3 迭代版21.3.1 思路1.3.2 实现1.3.3 实例 2. 中序遍历2.1 递归形式2.2 迭代形式2.2.1 观察2.2.2 思路&#xff08;抽象总结&#xff09;2.2.3 构思 实现2.2.4 分摊分析 3. 后序遍历3…

world machine学习笔记(4)

选择设备&#xff1a; select acpect&#xff1a; heading&#xff1a;太阳的方向 elevation&#xff1a;太阳的高度 select colour&#xff1a;选择颜色 select convexity&#xff1a;选择突起&#xff08;曲率&#xff09; select height&#xff1a;选择高度 falloff&a…

neo4j开放远程连接

注&#xff1a;本博客所用neo4j版本为社区5.12版 第一步&#xff1a;修改neo4j配置文件 首先找到neo4j的安装位置&#xff0c;点击进入conf文件夹&#xff0c;随后点击neo4j.conf文件&#xff0c;在“Network connector configuration”下面的单元中找到server.default_liste…

Android:使用Kotlin搭建MVVM架构模式

一、简介Android MVVM架构模式 MVVM全称&#xff1a;Model、View、ViewModel&#xff1b; Model&#xff1a;负责数据的请求、解析、过滤等数据层操作&#xff0c;其中Repository: 提供数据的 API&#xff08;从本地或者网络&#xff09;。View&#xff1a;负责视图部分展示Vie…