Loading

Window下 VS2019+QT6下编译osb-studio

作为一个obs老用户,一直用的是Mac版进行开发,作为Windows开发新手的我,准备编译一下osb练练手,熟悉一下Windows项目的编译流程。
osb wiki给出了Windows的编译流程,编译连接在这里。让我惊喜的是obs竟然要求vs2022,Windows 10 SDK (minimum 10.0.20348.0)和QT6.3,相比于其他C/C++项目,使用的技术可以说相当新了。
本次的编译环境:
OS:Windows 10 21H2 Build 19044.1826
IDE:VS2019
SDK:Windows 10 SDK version 2104 (10.0.20348.0)
CMake:3.22.1

先来看下项目编译的依赖条件:

其中CEF Wrapper我没有用到,这个是编译obs-browser(cef内核浏览器插件)用的,这里用不到,直接pass就好,cmake的时候把BUILD_BROWSER设置为OFF就行,这样就不会编译obs-browser了。
P.S. 这次编译的时候我没有手动设置 BUILD_BROWSER=OFF也编译成功了,cmake自动把它设置为了OFF,记得当初Mac编译obs的时候要手动设置才行,不然会报错。

项目推荐使用最新的vs2022,不过我用的是vs2019,并不影响,只要SDK达到最低要求(10.0.20348.0)就可以,SDK版本可以在这里查看:https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/ 。或者打开Visual Studio查看:

获取源吗

接下来就是下载源码和依赖项,我的项目路径为D:\download\obs_project,在这个路径下克隆项目:

git clone --recursive https://github.com/obsproject/obs-studio.git

获取依赖项

然后进入 https://github.com/obsproject/obs-deps/releases?q=windows 下载依赖项,这里要下载的文件有两个,我选择的都是64位的:

下载完毕后,将依赖项解压到项目路径下。

开始构建项目

打开cmake,设置obs源码路径和输出路径,并添加deps,QT路径,其中DepsPath设置为deps路径,QTDIR设置为QT路径。设置完成后点击Configure

接着弹出了一个弹框,选择vs2019,其他的可以用默认,点击Finish,就可以等待项目配置完成了。

等待一段时间后,cmake提示configuring done,点击Generate,生成vs项目文件。

提示Generating done后,点击Open Project,Visual Studio会自动打开obs项目。生成的sln文件位于D:\download\obs_project\obs-studio\build下。

打开项目后,右键ALL_BUILD,点击生成。结果出了一堆错误。

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

这里是项目设置为把warning视为error,所以编译不过,直接把4819加入到忽略列表里:

把出问题的项目加上忽略之后右键ALL_BUILD编译(我没有一个个查出问题的项目,而是把所有的项目都加上了4819忽略),这一次比上次好多了,只有一个编译失败。

错误信息:

1>LINK : fatal error C1900: “P1”(第“20211117”版)和“P2”(第“20210202”版)之间 Il 不匹配
1>LINK : fatal error LNK1257: 代码生成失败

问题出在了D:\download\obs_project\deps\lib\speexdsp.lib上,应该是speexdsp.lib的编译版本跟obs的不一致导致的。

解决的方法,经过网上查找,大多数是说要升级visual studio,但是我的vs2019已经是最新版本,这种方法无效;另一种方法是自己编译speexdsp.lib。还有一种更简单粗暴的方法,就是直接禁用speexdsp,在cmake里把ENABLE_SPEEXDSP设置为OFF(这只是我的不负责任推测,这种方法我没有实际测试过。speexdsp是音频降噪库,也有音频取消回声功能)。

所以还是选择重新编译speexdsp,先去官网下载speesdsp源码,地址是:https://www.speex.org/downloads/ 。下载解压后打开speexdsp-1.2.1\win32\VS2008,用vs2019打开sln文件,会弹出一个框询问是否升级项目,点击确定升级。

进入项目后,修改为Release x64版本,原项目只有x86,需要自己新建一个x64版本。

切换完成后右键libspeexdsp编译,成功编译出静态库。

但是当我们打开speexdsp-1.2.1\win32\VS2008\x64\Release后并没有找到libspeexdsp.lib,其实上面有提示warning:

warning MSB8012: TargetPath(D:\download\obs_project\speexdsp-1.2.1\win32\VS2008\x64\Release\libspeexdsp.lib) 与 Library 的 OutputFile 属性值(D:\download\obs_project\speexdsp-1.2.1\lib\libspeexdsp.lib)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 \((OutDir)、\)(TargetName) 和 $(TargetExt) 属性值与 %(Lib.OutputFile) 中指定的值匹配。

意思是项目设置里输出路径+目标文件名≠输出文件名。打开项目属性页,可以看到两者确实不一样:

只要把这两个改为相同路径相同文件名即可。顺便说一下,在D:\download\obs_project\deps\lib下,speexdsp库名字是speexdsp.lib,而我们自己生成的是libspeexdsp.lib,这里需要把项目的输出文件名改一下,统一为speexdsp.lib,这样生成库之后直接替换deps文件夹下的库就行。
修改后生成路径为:$(SolutionDir)$(Platform)\$(Configuration)\speexdsp.lib

重新编译后顺利生成speexdsp.lib,路径为D:\download\obs_project\speexdsp-1.2.1\win32\VS2008\x64\Release\。将生成的库文件替换到D:\download\obs_project\deps\lib
重新编译obs-filters,成功。

obs软件生成路径在 D:\download\obs_project\obs-studio\build\rundir\Release\bin\64bit,现在,打开obs64.exe,开始直播吧~

posted @ 2022-08-17 21:37  柴承训  阅读(1920)  评论(0编辑  收藏  举报