logo头像

不忘初心,奋力前行

在Windows10+VS2019环境下编译Opus

Opus库生成

将Opus库clone之后,找到目录中的win32文件夹,里面有一个vs2015目录,点击这里面的opus.sln,就会打开Opus的VS工程,如果你的VS版本是2017及以上,会提示你升级版本,这个时候确认就好了(如下图所示,由于我在编写该文档的时候已经生成了opus库和libopusenc库,所以这里以opusfile库为例)。

image-20200507174728054

在打开工程之后,点击“生成->生成解决方案”。待生成完成以后,会发现在当前目录下有了“Debug”目录,里面有下图的5个文件夹及关键的opus.lib文件,这就代表生成成功了。

image-20200507174757256

libopusenc库生成

同样,打开libopusenc\win32\VS2015,里面有一个opusenc.sln,双击打开之后,就会进入工程界面,如下图所示。

image-20200507174820713

然后依旧是点击生成该解决方案,生成成功会显示下面的提示:

img

生成的目录如下图所示:

img

注意:

如下图所示,生成libopusenc库需要依赖于opus库,所以需要先编译生成opus库才可以进行本工程的编译生成。

img

opusfile库编译生成

同样是在该工程win32\VS2015下,双击opusfile.sln,打开工程,确认升级。点击生成,会提示出现错误,例如下图

img

上图提示我们缺少ogg.h文件,实际上我们在进行opus编译的时候需要依赖于ogg和openssl库,因此我们需要下载这个库并进行编译。我们看下图,确定好ogg和openssl的目录必须和opusfile同一级目录。

img

ogg的生成

首先把ogg代码clone下来,继续进入win32\VS2015目录中的libogg.sln,打开之后重新生成,结果如下:

img

openssl编译

首先需要下载三个部分:

(1)Perl:http://www.activestate.com/activeperl/downloads/。

(2)NASM:https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/win64/(官网为http://www.nasum.us)

(3)Openssl:https://www.openssl.org/source/(我下载的是openssl-1.1.1g.tar.gz)

然后确定是否安装了Visual Studio。这里默认已经安装。

在上述三部分下载完成后,开始安装。

首先安装ActivePerl。按照完成后,在cmd输入perl -v确认是否安装成功,若成功则出现下面的界面:

img

然后安装NASM,直接安装即可。安装完成后,将安装地址(如我的是C:\Program Files\NASM)添加到系统变量Path中。

然后开始安装OpenSSL,将下载的openssl解压并将目录名修改为openssl。以下开始分步骤介绍:

(1)初始化编译环境。打开x86_x64 Cross Tools Command Prompt for VS 2019,切换到.\VC\Auxiliary\Build目录下,然后运行vcvars64.bat文件。然后切换目录到openssl目录下,执行

1
perl Configure VC-WIN64 no-asm --prefix=D:\codestudy\task\opusstudy\openssl

如果遇到以下提示:

img

即提示:Can’t locate Win32/Console.pm in @INC (you may need to install the Win32::Console module)

你需要进入C:\Perl64\lib\ActivePerl(具体目录以你的安装为准)打开Config.pm将392~414行替换为:

# Prevent calling Win32::Console::DESTROY on a STDOUT handle
#my $console;
sub _warn {
# my($msg) = @_;
# unless (-t STDOUT) {
# print “\n$msg\n”;
# return;
# }
# require Win32::Console;
# unless ($console) {
# $console = Win32::Console->new(Win32::Console::STD_OUTPUT_HANDLE());
# }
# my($col,undef) = $console->Size;
# print “\n”;
# my $attr = $console->Attr;
# $console->Attr($Win32::Console::FG_RED | $Win32::Console::BG_WHITE);
# for (split(/\n/, “$msg”)) {
# $_ .= “ “ while length() < $col-1;
# print “$_\n”;
# }
# $console->Attr($attr);
# print “\n”;
}

这样再继续运行上面的语句即可,成功界面如图:

img

(2)进行编译安装。注意:以下与网上的大部分教程有所不同。老版本的时候,要求我们执行:

1
2
3
ms\do_nasm

ms\do_win64a

但是新的openssl已经不能这样运行,需要执行的是:

1
nmake

然后执行

1
nmake test

结果如下:

img

时间会特别长,完成之后,运行

1
nmake install

img

理论上以上就可以了,但是实际上1.1.1版本之后,很多模式都与以前不同了。所以此时我降回来使用1.0.2版本,这时需要执行的命令就是

1
2
3
4
5
perl Configure VC-WIN64A
ms\do_win64a
nmake -f ms\ntdll.mak
cd out32dll
..\ms\test

完成之后是这样的界面

img

Opustool库生成

首先clone下flac库,然后进行编译。这里编译要先编译

libFLAC_dynamec

libFLAC_static

libFLAC++_dynamic

libFLAC++_static

先编译以上四个目录再往下走。在编译之前,将ogg的工程目录中的Include\ogg目录复制到flac\include中,然后拷贝ogg生成的文件 libogg_static.lib(ogg版本太高的话,名字变为libogg.lib,此时将文件名改名即可)到flac\objs\debug\lib中。

然后编译以上四个目录,再编译整个工程。

支付宝打赏 微信打赏 QQ钱包打赏

感觉不错?欢迎给我 打个赏~我将不胜感激!