C++ 如何在msys2下创建alpha_encoder.exe(webm工具)?

C++ 如何在msys2下创建alpha_encoder.exe(webm工具)?,c++,makefile,mingw-w64,webm,msys2,C++,Makefile,Mingw W64,Webm,Msys2,我正在尝试编译alpha_编码器(webm工具下的一个小实用程序)。 我以前在c:\FFcompiler下安装过msys2(由下载并配置)。它花费了我的时间,但我成功地编译了ffmpeg,所以我决定使用它(我想它可以)。这就是我到现在为止所做的 首先,我在/cygdrive/c/FFcompiler/ffmpeg\u local\u builds/sandbox/win32/libvpx-1.4.0/third\u party/下克隆了webm工具。有一个Makefile,所以我尝试运行make

我正在尝试编译alpha_编码器(webm工具下的一个小实用程序)。 我以前在
c:\FFcompiler
下安装过msys2(由下载并配置)。它花费了我的时间,但我成功地编译了ffmpeg,所以我决定使用它(我想它可以)。这就是我到现在为止所做的

首先,我在
/cygdrive/c/FFcompiler/ffmpeg\u local\u builds/sandbox/win32/libvpx-1.4.0/third\u party/
下克隆了webm工具。有一个
Makefile
,所以我尝试运行
make

$ cd /cygdrive/c/FFcompiler/ffmpeg_local_builds/sandbox/win32/libvpx-1.4.0/third_party/
$ git clone https://chromium.googlesource.com/webm/webm-tools.git
$ cd webm-tools/alpha_encoder/
$ make
但是g++抱怨mkvparser.hpp不存在。命令是

g++ -c -W -Wall -O3 -g -I../../libwebm alpha_encoder.cc -o alpha_encoder.o
在搜索web之后,webm工具似乎依赖于libwebm,并期望将其作为webm工具的同级文件夹找到。所以

现在,什么
README.libwebm
告诉“要使用mingw-w64交叉编译Windows版libwebm”,首先我必须像这样运行
cmake
cmake-DCMAKE_TOOLCHAIN_FILE=path/to/libwebm/build/mingw-w64_TOOLCHAIN.cmake path/to/libwebm。就我而言:

cmake -DCMAKE_TOOLCHAIN_FILE=build/mingw-w64_toolchain.cmake .
cmake
找不到i686-w64-mingw32-g++。在谷歌搜索更多内容后,似乎最简单的解决方法是将
mingw-w64-i686的
bin
添加到
PATH

$ export PATH=/cygdrive/c/FFcompiler/ffmpeg_local_builds/sandbox/cross_compilers/mingw-w64-i686/bin:$PATH
在此之后,现在
cmake
成功完成并创建了一个
Makefile
,但是
make
由于一个错误而停止:

/cygdrive/c/FFcompiler/ffmpeg_local_builds/sandbox/win32/libvpx-1.4.0/third_part
y/libwebm/common/file_util.cc:44:39: error: 'tmpnam_s' was not declared in this
scope
   errno_t err = tmpnam_s(tmp_file_name);
                                       ^

我已经找遍了这个错误,但我被卡住了。我遗漏了什么?

您需要一个更新的c编译器,或者您遗漏了在编译器标志中启用c11。不到两周前,我使用所提到的
.bat
安装了msys2-我想它已经更新了。关于标志,这是否意味着我必须调整
Makefile
cmake
不注意合适的标志吗?无论如何,我如何测试系统来找出这两件事是什么呢?你可以调整CMakeLists.txt,你需要将
-std=c99
添加到
CMAKE\u C\u FLAGS
变量中。我在CMakeLists.txt中没有发现
CMAKE\u C\u标志
,但是有一个
CMAKE\u-CXX\u标志
部分,所以我尝试了
set(CMAKE\u-CXX\u标志)-std=c99${CMAKE_CXX_FLAGS}”)
(没有损失)。现在
make
输出几次
cc1plus:warning:命令行选项'-std=c99'对C/ObjC有效,但对C++
无效,并在
tmpnam_
上以相同的范围错误停止。对于
CMAKE_CXX_标志
使用
-std=C++11
/cygdrive/c/FFcompiler/ffmpeg_local_builds/sandbox/win32/libvpx-1.4.0/third_part
y/libwebm/common/file_util.cc:44:39: error: 'tmpnam_s' was not declared in this
scope
   errno_t err = tmpnam_s(tmp_file_name);
                                       ^