win10 使用Msys2构建ffmepg4.3.1的64位程序
文件位置:C:\msys64\etc\pacman.d
mirrorlist的文件都要像下面这样改

pacman -Syu 更新环境
pacman -S --needed base-devel mingw-w64-x86_64-toolchain 安装MinGW64:
安装nasm nasm
输入 pacman -S nasm , 注意 S 大写:
安装yasm
输入 pacman -S yasm
安装make
输入 pacman -S make
安装diffutils
输入 pacman -S diffutils
MSYS2 主要有以下三种环境(通过不同的终端启动):
MSYS2 MSYS:中立环境,主要用于开发 MSYS2 本身。
MSYS2 MINGW32:提供 32 位 的 MinGW-w64 GCC 工具链(i686-w64-mingw32)。
MSYS2 MINGW64:提供 64 位 的 MinGW-w64 GCC 工具链(x86_64-w64-mingw32)。
构建64位就启动MINGW64程序。
gcc -v 如果是有:x86_64-w64-mingw32就是使用的64位的编译器。
我主要使用ffmpeg的是录屏和录音功能,我的configure配置是这样的:
/d/ff/build是最后编译好的软件所在位置。
./configure \ --prefix=/d/ff/build \ --target-os=mingw64 \ --arch=x86_64 \ --enable-shared \ --enable-ffmpeg \ --enable-gpl \ --enable-nonfree \ --enable-libx264 \ --enable-libfdk-aac \ --enable-avcodec \ --enable-avformat \ --enable-swscale \ --enable-swresample \ --enable-avdevice \ --disable-doc \ --disable-htmlpages \ --disable-manpages \ --disable-podpages \ --disable-txtpages \ --extra-cflags="-I/usr/local/include" \ --extra-ldflags="-L/usr/local/lib" \ --extra-cflags="-s -O2" \ --extra-cflags="-D_WIN32_WINNT=0x0A00" \ --extra-ldflags="-OPT:NOREF" \ --extra-ldflags="-Wl,-strip-all"
我遇到的问题:
1、在make时报错: Error: operand type mismatch for `shr‘
粘贴出来的解决方法二:
将ffmpeg源码中 mathops.h 中的如下代码做一个修改,其实在新版本的ffmpeg中已经修复了这个问题,可以去查看一下最新版的ffmpeg中 libavcodec/x86/mathops.h 中的修改,然后将我们的mathops.h 修改为如下:
#define MULL MULL
static av_always_inline av_const int MULL(int a, int b, unsigned shift)
{
int rt, dummy;
asm (
"imull %3 \n\t"
"shrdl %4, %%edx, %%eax \n\t"
:"=a"(rt), "=d"(dummy)
:"a"(a), "rm"(b), "c"((uint8_t)shift)
);
return rt;
}
#define NEG_SSR32 NEG_SSR32
static inline int32_t NEG_SSR32( int32_t a, int8_t s){
asm ("sarl %1, %0\n\t"
: "+r" (a)
: "c" ((uint8_t)(-s))
);
return a;
}
#define NEG_USR32 NEG_USR32
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
asm ("shrl %1, %0\n\t"
: "+r" (a)
: "c" ((uint8_t)(-s))
);
return a;
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
2、安装好后,运行ffmpeg,出现dll缺失提示。
解决办法:需要拷贝msys2里的dll,提示缺失什么dll,就到msys2的安装目录去搜索,找到后复制粘贴到ffmpeg的bin目录下。
3、安装好后,运行ffmpeg,提示:ffmpeg.exe 无法找到入口 无法定位程序输入点 clock_gettime64 于动态链接库 avutil-56.dll。
解决办法:clock_gettime64 这个方法是linux的方法,在windows中用msys2编译的程序,需要把msys2的两个dll拷贝到ffmpeg的bin目录下,
具体的dll名称:msys-2.0.dll、libwinpthread-1.dll。
之后就能成功运行了。

浙公网安备 33010602011771号