Centos7安装ZLMediaKit
一 获取代码
git clone https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
git submodule update --init
git submodule update --init
命令用于初始化和更新 Git 仓库中的子模块(submodules)。这个命令在 Git 仓库中包含对其他 Git 仓库作为依赖时非常有用。下面是命令的详细解释:
-
--init:这个选项用于初始化仓库中的子模块配置。它会读取
.gitmodules
文件,这个文件包含了子模块的 URL 和预期的提交哈希值等信息。运行--init
选项后,Git 会在.git/config
文件中记录这些子模块的信息,并在.git/modules
目录下为每个子模块创建相应的配置和仓库目录。 -
update:这个选项用于更新子模块到
.gitmodules
文件中指定的提交。如果仅运行git submodule update
而没有--init
,Git 会假定子模块已经被初始化,并尝试更新它们到预期的提交。但是,如果子模块尚未初始化,这个命令会失败。因此,通常将--init
和update
结合使用以确保子模块被正确初始化和更新。
结合起来,git submodule update --init
命令的作用可以总结为:
- 读取
.gitmodules
文件,初始化仓库中的子模块配置。 - 检出(checkout)每个子模块到
.gitmodules
文件中指定的提交。
如果你还需要递归地初始化和更新子模块中的子模块,可以添加 --recursive
选项,即使用 git submodule update --init --recursive
命令。
这个命令对于管理大型项目中的依赖非常有用,可以确保所有依赖的库或项目都位于正确的版本,从而避免版本冲突和依赖问题。
二 下载第三方库
2.1 gcc 版本>=4.8
- 查看版本
gcc --version
gcc -v
- 安装
sudo yum install gcc
sudo yum install gcc-c++
2.2 cmake版本>=3.1.7
在 Linux 系统上,你可以通过终端命令来查看已安装的 CMake 版本。CMake 是一个跨平台的自动化构建系统,它使用一个名为 CMakeLists.txt
的文件来定义项目的构建过程。
要查看 CMake 的版本,请打开你的终端并输入以下命令:
cmake --version
这个命令将输出 CMake 的版本信息,包括版本号、CMake suite 的组件(如 cmake、cmake-gui、ctest 等)的版本,以及 CMake 是在哪个日期构建的。
如果你没有看到这个命令的输出,或者系统提示 cmake: command not found
,那么可能是 CMake 没有被正确安装在你的系统上,或者它的可执行文件没有被添加到你的 PATH 环境变量中。
在这种情况下,你可以尝试以下几种方法:
-
确认 CMake 是否已安装:检查你的系统包管理器(如 apt、yum、dnf 等)是否包含了 CMake 包。
-
使用包管理器安装 CMake:如果你的系统上还没有安装 CMake,你可以使用包管理器来安装它。例如,在基于 Debian 的系统(如 Ubuntu)上,你可以使用
sudo apt-get install cmake
命令来安装。 -
检查 PATH 环境变量:如果 CMake 已经安装,但是系统找不到它,可能是因为它的可执行文件路径没有被添加到 PATH 环境变量中。你可以通过
echo $PATH
命令来查看当前的 PATH 设置,并确认 CMake 的安装路径是否包含在内。 -
使用完整路径运行 CMake:如果你知道 CMake 的安装路径,但是不想修改 PATH 环境变量,你可以直接使用完整路径来运行 CMake 命令。例如,如果 CMake 安装在
/usr/local/bin/cmake
,你可以使用/usr/local/bin/cmake --version
来查看版本信息。
- 安装
sudo yum -y install cmake //版本可能是2.8,编译时版本不够,可按以下方式安装cmake
wget https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz
tar -xvf cmake-3.17.0-rc3.tar.gz
cd cmake-3.17.0-rc3
./configure
make -j4
sudo make install
2.3 安装依赖库
- 查看版本
rpm -qa | grep openssl-devel
rpm -qa | grep SDL2-devel
- 安装
sudo yum install openssl-devel
sudo yum install SDL2-devel
2.3.2 解压源代码
2.3.3 配置编译环境
2.3.34 编译 SDL2
五、安装 SDL2
六、验证安装
-
从源代码编译 SDL2 的步骤通常包括下载源代码、配置编译环境、编译和安装等。以下是一个详细的指南:
2.3.1 下载 SDL2 源代码
- 访问 SDL 的官方网站(Simple DirectMedia Layer - Homepage)或其在 GitHub 上的仓库(GitHub - libsdl-org/SDL: Simple Directmedia Layer)。
- 在“Releases”部分找到最新的稳定版本,并下载其源代码压缩包(通常是
.tar.gz
格式)。 -
使用
tar
命令解压下载的源代码压缩包。例如,如果下载的文件名是SDL2-x.y.z.tar.gz
,你可以使用以下命令解压:tar -xzvf SDL2-x.y.z.tar.gz
这将创建一个名为
SDL2-x.y.z
的目录,其中包含 SDL2 的源代码。 -
进入解压后的源代码目录:
cd SDL2-x.y.z
-
运行
./configure
脚本以配置编译环境。这个脚本会检查你的系统环境,并生成适合你的系统的 Makefile 文件。在配置过程中,你可以根据需要传递一些选项来定制编译过程。例如,如果你想要编译一个静态库,可以使用--enable-static
选项。注意:在某些系统上,你可能需要安装额外的依赖项(如
autoconf
、automake
、libtool
等)才能运行./configure
脚本。 -
在配置完成后,使用
make
命令来编译 SDL2。这个命令会调用 Makefile 文件中的规则,并使用你的系统编译器来编译源代码。make
编译过程可能需要一些时间,具体取决于你的系统性能和源代码的复杂性。
-
编译完成后,使用
make install
命令来安装 SDL2。这个命令会将编译好的库文件、头文件和其他资源复制到你的系统目录中(通常是/usr/local/lib
和/usr/local/include
)。
注意:使用sudo make install
sudo
命令是因为安装过程通常需要写入系统目录的权限。 -
你可以通过编写一个简单的 SDL2 程序来验证安装是否成功。例如,创建一个包含以下代码的 C 文件:
#include <SDL2/SDL.h> #include <stdio.h> int main(int argc, char* argv[]) { if (SDL_Init(SDL_INIT_VIDEO) != 0) { printf("SDL_Init Error: %s\n", SDL_GetError()); return 1; } SDL_Window* window = SDL_CreateWindow("SDL2 Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); if (window == NULL) { printf("SDL_CreateWindow Error: %s\n", SDL_GetError()); return 1; } SDL_Delay(3000); SDL_DestroyWindow(window); SDL_Quit(); return 0; }
-
编译并运行该程序。如果一切顺利,你应该能够看到一个显示窗口,并在 3 秒后自动关闭。
gcc -o test_sdl2 test_sdl2.c -lSDL2 ./test_sdl2
注意:在编译时,你需要确保编译器能够找到 SDL2 的头文件和库文件。这通常意味着你需要将 SDL2 的安装路径添加到你的编译器搜索路径中(例如,使用
-I
和-L
选项),或者将 SDL2 的库文件链接到你的程序中(使用-lSDL2
选项)。但是,如果你按照上述步骤正确安装了 SDL2,这些路径通常会被自动配置正确。
2.3 安装ffmpeg>=4.2.1
增加源:
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm
https://www.ffmpeg.org/download.html#build-linux //官网上下载4.2.1的包
tar -xvf ffmpeg-4.2.1.tar.xz
cd ffmpeg
./configure //可能会失败,报错为nasm/yasm not found or tool old.....
//如果报错。执行sudo yum install yasm
make
make install
ffmpeg -version //可能会出现找不到/usr/bin/ffmpeg的错误,将/usr/local/bin的ffmpeg复制到/usr/bin目录下即可
出现类似以下图片所示表示成功
三 安装ZLMediaKit
cd ZLMediaKit
mkdir build
cmake ..
make -j4
make install
相关文章:

Centos7安装ZLMediaKit
一 获取代码 git clone https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init git submodule update --init 命令用于初始化和更新 Git 仓库中的子模块(submodules)。这个命令在 Git 仓库中包含对其他 Git 仓库作为依赖时…...

面试问我LLM中的RAG,咱就是说秒过!!!
前言 本篇文章涉及了 RAG 流程中的数据拆分、向量化、查询重写、查询路由等等,在做 RAG 的小伙伴一定知道这些技巧的重要性。推荐仔细阅读,建议收藏,多读几遍,好好实践。 本文是对检索增强生成(Retrieval Augmented …...
python程序操作pdf
python代码进行多个图片合并为pdf: #python代码进行多个图片合并为pdf: from PIL import Image from fpdf import FPDF import osdef images_to_pdf(image_paths, output_pdf, quality85):"""将多个图片合并为一个PDF文件,并…...

【Python报错】ImportError: DLL load failed while importing _network: 找不到指定的模块。
【Python报错】ImportError: DLL load failed while importing _network: 找不到指定的模块。 问题描述报错原因解决方案参考 问题描述 此段Python代码(在Conda环境下运行)昨天还能运行,但在我手痒更新conda(我有罪)之…...

外包干了5天,技术明显退步
我是一名本科生,自2019年起,我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定,但日复一日的重复性工作让我逐渐陷入了舒适区,失去了前进的动力。两年的时光匆匆流逝,我却在原地踏步,技术没有丝毫…...

正则表达式 | Python、Julia 和 Shell 语法详解
正则表达式在网页爬虫、脚本编写等众多任务中都有重要的应用。为了系统梳理其语法,以及 Python、Julia 和 Shell 中与正则表达式相关的工具,本篇将进行详细介绍。 相关学习资源:编程胶囊。 基础语法 通用语法 在大多数支持正则表达式的语…...

JavaScript全面指南(一)
🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南(一) 1、介绍一下JS的内置类型有哪些? 基本数据类型…...
docker-compose与docker
“docker-compose” 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个名为 docker-compose.yml 的配置文件来描述应用程序的服务、网络和卷,然后通过简单的命令就可以管理整个应用。 以下是一些常用的 docker-compose 命令及其用法: 启动…...
DDPM浅析
在机器学习和人工智能领域,生成模型一直是一个备受关注的研究方向。近年来,一种新型的生成模型——扩散概率模型(Diffusion Probabilistic Models,简称DDPM)引起了广泛的关注。本文将探讨DDPM的原理、优势以及应用。 …...

力扣刷题-算法基础
hello各位小伙伴们,为了进行算法的学习,小编特意新开一个专题来讲解一些算法题 1.移除元素. - 力扣(LeetCode) 本题大概意思是给定一个数组和一个数val删除与val相同的元素,不要改变剩余元素的顺序,最后返回剩余元素的个数。 我们在这里使用双指针,这里的双指针并不是…...
理解 Python 中的 Hooks 和装饰器
Python 中的 hooks 和装饰器,虽然它们看起来都有些魔法加成,但实际上各有妙用。下面看看他们到底是做什么的吧。 什么是 Hooks? Hooks 是指在某些操作或事件发生时,可以将自定义的代码插入和执行的一种机制。它们常用于扩展和修…...
Android 原生程序使用gdb, addr2line, readelf调试
Platform: RK3368 OS: Android 6.0 Kernel: 3.10.0 文章目录 一 gdb1. 原生程序添加调试符号2. 主机上adb push 编译好的原生程序到设备3. 设备上使用gdbserver运行原生程序4. 主机上设置adb端口转发5. 主机上运行gdb调试 二 addr2line三 readelf 一 gdb GDB(GNU…...
PHP 函数 func_num_args() 的作用
func_num_args() 是 PHP 中的一个内置函数,用于获取传递给当前用户定义函数的参数个数。这个函数特别有用于处理可变数量的参数(也称为可变参数列表)。 语法 int func_num_args ( void ) 返回值 func_num_args() 返回一个整数,…...
深入解析单片机原理及其物联网应用:附C#示例代码
深入解析单片机原理及其物联网应用:附C#示例代码 随着物联网技术的快速发展,单片机作为嵌入式系统的核心,已经广泛应用于各类智能设备中。本文将从单片机的原理出发,结合C#编程的物联网示例,带你深入了解如何利用单片…...
HTTP 和 WebSocket
目录 HTTP是什么HTTP局限性(HTTP1.1)请求和响应HTTP的主要特点:HTTP版本: HTTP与TCP关系数据封装传输过程1. **协议层次模型**:2. **封装过程**:1. **应用层(HTTP)**:2. …...

科技云报到:大模型时代下,向量数据库的野望
科技云报到原创。 自ChatGPT爆火,国内头部平台型公司一拥而上,先后发布AGI或垂类LLM,但鲜有大模型基础设施在数据层面的进化,比如向量数据库。 在此之前,向量数据库经历了几年的沉寂期,现在似乎终于乘着Ch…...

贪吃蛇游戏(代码篇)
我们并不是为了满足别人的期待而活着。 前言 这是我自己做的第五个小项目---贪吃蛇游戏(代码篇)。后期我会继续制作其他小项目并开源至博客上。 上一小项目是贪吃蛇游戏(必备知识篇),没看过的同学可以去看看…...
数控走心机系统可以定制吗
当然,走心机系统是可以定制的。随着数控技术的不断发展,走心机的数控系统越来越灵活,可以根据用户的具体需求进行定制和优化。下面,我将从几个方面来详细解答这个问题: 一、系统定制的必要性 1. 满足不同加工需求…...

PHP实现OID(Object identifier)的编码和解码
转载于:https://bkssl.com/document/php_oid_encode_decode.html <?phpclass ASN1ObjectIdentifier {/*** OID字符串编码为二进制数据* param string $oid 字符串形式的OID* return string*/public static function encode($oid){$parts explode(., $oid);$pa…...

架构设计笔记-12-信息系统架构设计理论与实践
目录 知识要点 案例分析 1.Java企业级应用系统 2.c/s架构,b/s架构 知识要点 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一类架构所共有的特征,主要包括架构定义、架构词汇表和架构约束。 数据挖掘是从数据库的大…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...