编译ZLMediaKit(win10+msvc2019_x64)

2024-01-08 07:36

本文主要是介绍编译ZLMediaKit(win10+msvc2019_x64),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

因工作需要,需要ZLMediaKit,为方便抓包分析,最好在windows系统上测试,但使用自己编译的第三方库一直出问题,无法编译通过。本文档记录下win10上的编译过程,供有需要的小伙伴使用

一、需要安装的软件

1.git

下载地址:Git - Downloading Package

这个网上资料很多,就不解释了

2.cmake

Download CMake

这个网上资料也很多,同样不解释了

3.vs2019

这个不解析了

二、下载配置 vcpkg

1.下载vcpkg,下载路径假设为: C:\work\develop, 执行

git clone https://github.com/microsoft/vcpkg

2.下载预编译的 vcpkg 包管理工具

.\vcpkg\bootstrap-vcpkg.bat -disableMetrics

3.编译openssl

.\vcpkg\vcpkg.exe install --triplet=x64-windows-static openssl

4.编译libsrtp,需要启用openssl,需要找到vcpkg_configure_cmake文件,

具体文件地址为C:\work\develop\vcpkg\ports\libsrtp\portfile.cmake

其中C:\work\develop\为vcpkg的目录地址

添加代码,-DENABLE_OPENSSL:BOOL=ON,以上是笔者的文件

然后进行编译:

.\vcpkg\vcpkg.exe install --triplet=x64-windows-static libsrtp

编译完成后,就可以在C:\work\develop\vcpkg\installed\x64-windows-static目录下找到已经编译完成的库

其中C:\work\develop\为vcpkg的目录地址

注:对应命令可能需要执行多次,此过程可能比较长

三、获取ZLMediaKit源码


使用 Git 克隆 ZLMediaKit 的代码并初始化子模块

# 国内用户推荐从 Gitee 下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
# 初始化子模块 (必须执行)
git submodule update --init

 注:不能通过下载 zip 包的方式下载源码。因为 ZLMediaKit 依赖于第三方代码并通过 Git 子模块的方式管理。

四、编译ZLMediaKit源码

使用也很简单,可以直接引用生成的静态库,也可以直接导入编译链文件

以上两种方法,笔者都编译成功了,以下介绍下后者的使用方法

导入编译链文件,可以直接使用命令行,参考如下

mkdir build
cd build
$VCPKG_CMAKE = 'C:\work\develop\vcpkg\scripts\buildsystems\vcpkg.cmake'
$VCPKG_INSTALL_PATH = 'C:\work\develop\vcpkg\installed\x64-windows-static'$CMAKE_OPTIONS = @("-GCodeBlocks - Ninja""-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo""-DCMAKE_C_COMPILER:STRING=cl.exe""-DCMAKE_CXX_COMPILER:STRING=cl.exe""-DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_CMAKE""-DCMAKE_PREFIX_PATH:FILEPATH=$VCPKG_INSTALL_PATH""-DVCPKG_TARGET_TRIPLET:STRING=x86-windows-static""-DENABLE_WEBRTC:BOOL=ON"
)
cmake .. @CMAKE_OPTIONS
cmake --build . --target all

但笔者使用的图形界面操作的

打开cmake-gui

 选择正确的源码目录和编译目录,然后点击Configure

在弹出的对话框中,选择指定编译链文件,如下是笔者的选择

 

在vcpkg目录中,找到对应的vcpkg.cmake文件,以下是笔者的目录

 

过会就可以自己修改下,感兴的选项了,如

生成的库文件,输出目录

其中如下选项需要修改下

1.VCPKG_TARGET_TRIPLET,需要修改为x64-windows-static(与vcpkg的实际目录对应)

2.编译 64 位程序在链接 openssl 时还需要链接 Crypt32.lib 和 ws2_32.lib,

直接添加在链接库后面就可以,以下是笔者添加的

Configure完成后,点击Generate,完成后,会在编译输出目录生成vs项目文件

可以双击这个文件或点击CMake-gui中的Open Project,直接打开VS2019

接下来,切换成Release、编译、安装 

若一切正常,就可以得到所需的文件了

已经编译好的文件下载(Release模式)

后记

因为众所周知的缘故,建议使用vcpkg下载时,使用科学的上网方式,否则可能无法正常下载

因时间所限,未对之前,无法直接使用自己编译的第三方库,若有已经找出原因的小伙伴,希望能留言说明下

这篇关于编译ZLMediaKit(win10+msvc2019_x64)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582721

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

Golang test编译使用

创建文件my_test.go package testsimport "testing"func TestMy(t *testing.T) {t.Log("TestMy")} 通常用法: $ go test -v -run TestMy my_test.go=== RUN TestMyTestMy: my_test.go:6: TestMy--- PASS: TestMy (0.

CentOS 7 x64下安装MySql5.7图文详解

参考: https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ http://www.jianshu.com/p/7cccdaa2d177 http://www.linuxidc.com/Linux/2016-09/135288.htm 最近搞了台阿里云服务器,搭载的是CentOS 7系统,这里记录下mysql5.7的安装流程 查

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

QT 编译报错:C3861: ‘tr‘ identifier not found

问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )