Centos7安装ZLMediaKit

news2024/10/23 3:40:19

https://github.com/ZLMediaKit/ZLMediaKit

一 获取代码

git clone https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
git submodule update --init

git submodule update --init 命令用于初始化和更新 Git 仓库中的子模块(submodules)。这个命令在 Git 仓库中包含对其他 Git 仓库作为依赖时非常有用。下面是命令的详细解释:

  1. --init:这个选项用于初始化仓库中的子模块配置。它会读取 .gitmodules 文件,这个文件包含了子模块的 URL 和预期的提交哈希值等信息。运行 --init 选项后,Git 会在 .git/config 文件中记录这些子模块的信息,并在 .git/modules 目录下为每个子模块创建相应的配置和仓库目录。

  2. 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 环境变量中。

在这种情况下,你可以尝试以下几种方法:

  1. 确认 CMake 是否已安装:检查你的系统包管理器(如 apt、yum、dnf 等)是否包含了 CMake 包。

  2. 使用包管理器安装 CMake:如果你的系统上还没有安装 CMake,你可以使用包管理器来安装它。例如,在基于 Debian 的系统(如 Ubuntu)上,你可以使用 sudo apt-get install cmake 命令来安装。

  3. 检查 PATH 环境变量:如果 CMake 已经安装,但是系统找不到它,可能是因为它的可执行文件路径没有被添加到 PATH 环境变量中。你可以通过 echo $PATH 命令来查看当前的 PATH 设置,并确认 CMake 的安装路径是否包含在内。

  4. 使用完整路径运行 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 选项。

    注意:在某些系统上,你可能需要安装额外的依赖项(如 autoconfautomakelibtool 等)才能运行 ./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
cd build
cmake ..
make -j4
make install

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

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

相关文章

vue3 + ts + element-plus 二次封装 el-dialog

实现效果&#xff1a; 组件代码&#xff1a;注意 style 不能为 scoped <template><el-dialog class"my-dialog" v-model"isVisible" :show-close"false" :close-on-click-modal"false" :modal"false"modal-class&…

web网页QQ登录

代码&#xff1a; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>QQ登录ent</title> </head> <style>ul > li{list-style: none; } a …

U盘数据丢失不用慌,这4个工具可以帮你恢复。

因为将大量的数据存到U盘里面很方便&#xff0c;所以U盘使用也很广泛。但是里面的数据丢失想必很多朋友都碰到过&#xff0c;不过现在有很多方法都可以帮助大家将数据回顾回来。这里我便筛选了几款比较好的数据恢复工具&#xff0c;在这里跟大家分享。 1、福昕U盘恢复软件 直通…

AI练中学,你的 AI 助教又升级啦!

你是否在代码学习过程中遇到过这些问题&#xff1f;理论学习和动手实践割裂&#xff1b;课上的示例代码跑起来很麻烦&#xff1b;需要自己配置开发环境&#xff0c;在服务器上配开发环境要付费&#xff0c;折腾半天之后报错。 在大模型应用开发领域&#xff0c;获取大模型 API…

设计模式:类与类之间关系的表示方式(聚合,组合,依赖,继承,实现)

目录 聚合关系 组合关系 依赖关系 继承关系 实现关系 聚合关系 聚合是一种较弱的“拥有”关系&#xff0c;表示整体与部分的关系&#xff0c;但部分可以独立于整体存在。例如&#xff0c;部门和员工之间的关系&#xff0c;一个部门可以包含多个员工&#xff0c;但员工可以…

MFC工控项目实例二十五多媒体定时计时器

承接专栏《MFC工控项目实例二十四模拟量校正值输入》 用多媒体定时器实现0.1秒计时器 1、在SEAL_PRESSUREDlg.h文件中添加代码 #include<MMSystem.h> #pragma comment(lib,"winmm.lib")class CSEAL_PRESSUREDlg : public CDialog { public:CSEAL_PRESSUREDlg(…

计算机网络基础进阶

三次握手四次挥手 三次握手 1------建立连接----------------------2 ACK1&#xff0c;seq0 2------传输数据&#xff0c;建立连接---------1 1------传输数据&#xff0c;建立连接---------2 三次握手用于建立TCP连接&#xff0c;确保通信双方都准备好进行数据传输。整个…

使用 Git LFS(大文件存储)

Git LFS&#xff08;Large File Storage&#xff09;是一种扩展 Git 的工具&#xff0c;旨在更有效地管理大文件的版本控制。它通过将大文件的内容存储在 Git 之外来解决 Git 在处理大文件时的性能问题。 主要特点 替代存储&#xff1a;Git LFS 不直接将大文件存储在 Git 仓库…

C++类和对象 - 下【匿名对象,友元,static成员】

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 ​编辑 再探构造函数 类型转换 static成员 友元 内部类 匿名对象 对象拷⻉时的编译器优化 再探构造函数 之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;…

Mac 远程 Windows 等桌面操作系统工具 Microsoft Remote Desktop for Mac 下载安装详细使用教程

最近需要在 Mac 上远程连接控制我的 windows 电脑系统&#xff0c;经过一番尝试对于 win 来说还是微软自家推出的 Microsoft Remote Desktop for Mac 最最好用&#xff0c;没有之一 简介 Microsoft Remote Desktop是一款由微软公司开发的远程桌面连接工具&#xff0c;可以让用…

Redis遇到Hash冲突怎么办?

这是小伙伴之前遇到的一个面试题&#xff0c;感觉也是一个经典八股&#xff0c;和大伙分享下。 一 什么是 Hash 冲突 Hash 冲突&#xff0c;也称为 Hash 碰撞&#xff0c;是指不同的关键字通过 Hash 函数计算得到了相同的 Hash 地址。 Hash 冲突在 Hash 表中是不可避免的&am…

开源图像超分ECBSR项目源码分析

相关介绍 项目GitHub地址&#xff1a;https://github.com/xindongzhang/ECBSR项目相关论文&#xff1a;https://www4.comp.polyu.edu.hk/~cslzhang/paper/MM21_ECBSR.pdf&#xff08;也可以点这里下载&#xff09;论文解读&#xff1a;Edge-oriented Convolution Block for Re…

CLion远程开发Ubuntu,并显示helloworld文字框

1.CLion的介绍以及其在远程开发上的优点 1&#xff09;CLion 是一个由 JetBrains 开发的跨平台 C/C 集成开发环境&#xff08;IDE&#xff09;&#xff0c;功能强大。 2&#xff09;CLion的优点&#xff1a; 远程工具链支持&#xff1a;CLion 支持通过 SSH 连接到远程 Ubuntu…

Unity--AssestBundles--热更新

使用Node.js搭建AssestBundle服务器并验证AB包热更新 一、服务器部分 使用NodeJs作为服务器&#xff0c; 使用Express为基础网页模版。 当然&#xff0c; 使用其他的FTP&#xff0c;http服务器也可以&#xff0c; 基础逻辑是存放资源的位置。 1.下载Node.js 下载地址:https…

【Python】NumPy(二):数组运算、数据统计及切片索引、广播机制

目录 Numpy数组 数组的基本运算 乘法 加法 数组的数据统计 平均值 中位数 最大值和最小值 求和 累积和 标准差 方差 切片和索引 索引 一维数组的索引 二维数组的索引 获取多个元素 布尔索引 切片 一维数组切片 二维数组切片 多维数组切片 广播机制 规则 …

本地生活便民信息服务小程序源码系统 PHP+MySQL组合开发 带完整的安装代码包以及搭建部署教程

系统概述 地方门户分类信息网站源码系统是一个基于PHP和MySQL开发的强大平台&#xff0c;旨在帮助用户轻松搭建地方性的分类信息网站。该系统集成了众多实用功能&#xff0c;支持用户自由发帖、浏览和搜索各类信息&#xff0c;如二手交易、求职招聘、房屋租售、生活服务、商家…

【java】抽象类和接口(了解,进阶,到全部掌握)

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好我们今天来学习Java面向对象的的抽象类和接口&#xff0c;我们大家庭已经来啦~ 一&#xff1a;抽象类 1.1:抽象类概念 在面向对象的概念中…

练习题(动态规划)

一&#xff0c;最长上升子序列2 题目&#xff1a; 思路分析&#xff1a; 之前的最长上升子序列的时间度是O(n^2)&#xff0c;同时集合划分是按以第 i - 1 个数是几来划分的&#xff0c;状态转移方程也很简单是 f[i] f[j] 1 &#xff0c;最后取所有一个max 那怎么优化呢&am…

ST7789读取ID错误新思路(以STC32G为例)

1.前言 前两天刚把ST7789写入搞定&#xff0c;这两天想折腾一下读取。最开始是读ID&#xff0c;先是用厂家送的程序&#xff0c;程序里面用的是模拟I8080协议&#xff0c;一切正常。后来我用STC32G的内置LCM模块&#xff0c;发现读取不出来。更神奇的是ID读不出来&#xff0c;…

【AIGC】AI如何匹配RAG知识库: Embedding实践,语义搜索

引言 RAG作为减少模型幻觉和让模型分析、回答私域相关知识最简单高效的方式&#xff0c;我们除了使用之外可以尝试了解其是如何实现的。在实现RAG的过程中Embedding是非常重要的手段。本文将带你简单地了解AI工具都是如何通过Embedding去完成语义分析匹配的。 Embedding技术简…