windows下编译64位ffmpeg的问题。以64位 zlib为例

2023-05-16

x264,265。。。等等10几个库都很顺利的编译过去了,zlib的64位库在vs2015下下编译通过了。放到ffmpeg环境里。死活找不到。卡了我整整两天。怎么折腾,始终提升error: zlib requested, but not found.开始各种捣鼓。安装libz-devel.自己编译,改各种pc文件,lib文件名。不得法。百度也没说这个的,后来翻qiang google搜到一篇文章,才明白咋回事,的确不能像无头苍蝇一下乱撞。哪个库编译不过。首先看ffbuild/config.log文件查找原因。错误虽然提示再最后一行。但是更详细的原因要在这个文件前面部分仔细查找。一般说的都很详细。像我这个,人家上面写着一行:

check_pkg_config zlib zlib zlib.h zlibVersion
test_pkg_config zlib zlib zlib.h zlibVersion
false --exists --print-errors zlib
check_lib zlib zlib.h zlibVersion -lz
check_func_headers zlib.h zlibVersion -lz
test_ld cc -lz
test_cc
BEGIN ./ffconf.o2M6qpqs/test.c
    1	#include <zlib.h>
    2	#include <stdint.h>
    3	long check_zlibVersion(void) { return (long) zlibVersion; }
    4	int main(void) { int ret = 0;
    5	 ret |= ((intptr_t)check_zlibVersion) & 0xFFFF;
    6	return ret; }
END ./ffconf.o2M6qpqs/test.c
cl -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_WIN32_WINNT=0x0600 -nologo -DHAVE_UNISTD_H=0 -MD -c -Fo./ffconf.o2M6qpqs/test.o ./ffconf.o2M6qpqs/test.c
test.c
d:\develop\visualstudio\vcpkg\installed\x86-windows\include\zconf.h(477): fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory

实际上就是unistd.h文件找不到的原因。实际上需要修改一处zconf.h中的一处错误。需要注释掉

//#if 1    /* was set to #if 1 by ./configure */
#if 0
#  define Z_HAVE_UNISTD_H
#endif

这样就不在需要引用unistd.h文件了。也就没有了错误。

还有个错误。我最初总是抱着自己的lib目录下的东西修改。其实仔细一看ffmpeg是autodetect的系统文件夹/ming64/lib下面的库。用自己的lib目录还是系统目录。其实人家log文件里面也有提示的:

AUTODETECT_LIBS='
    
    alsa
    appkit
    avfoundation
    bzlib
    coreimage
    iconv
    libxcb
    libxcb_shm
    libxcb_shape
    libxcb_xfixes
    lzma
    schannel
    sdl2
    securetransport
    sndio
    xlib
    zlib

只要是放在这个autodetect_libs里面的都是优先查找系统目录。

还有几个技巧。看lib是否存在可以用命令:pkg_config --libs zlib来查看,

还有一个用mingw64,msvc交叉编译的问题。当需要引用自己的lib路径时候。如果按照传统的引用方法;

--extra-ldflags=-L/d/msys64/git/ffmpeg/lib

这样引用msvc编译器是找不到库路径的。应该用-libpath这种风格。并且当引用多个库时候应该是这种写法。不能是空格分号或者逗号

--extra-ldflags="-LIBPATH:/d/msys64/git/ffmpeg/lib -LIBPATH:/d/msys64/lib" 

启动mingw64和msvc交叉编译环境没啥门道,按网上说的来就行。这里也备注一下:

dos窗口运行
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"
编辑D:/msys64/msys2_shell.cmd,
将其中的:rem set MSYS2_PATH_TYPE=inherit “rem”注释删除掉,成为:set MSYS2_PATH_TYPE=inherit
 msys2_shell.cmd -mingw64
在窗口上右击鼠标,选择[Options]菜单,选择[Text],locale选择:zh_CN,Character set 选择 GBK。

avs不要了,没用,没法编译
 
./configure --toolchain=msvc --arch=x86_64 --target-os=win64 --enable-gpl --enable-version3 --enable-nonfree --enable-static --enable-shared --enable-ffplay --enable-zlib --enable-libx264 --enable-libx265 --enable-cuda --enable-cuvid --disable-bzlib  --enable-iconv --enable-libmfx  --enable-libmp3lame --enable-libfdk-aac --enable-libvo-amrwbenc --enable-libopencore-amrnb --enable-libxvid --enable-libopencore-amrwb --enable-nvenc --enable-libopenh264 --extra-ldflags="-LIBPATH:/d/msys64/git/ffmpeg/lib -LIBPATH:/d/msys64/mingw64/lib" 
 

ps:--enable-bzlib,其实需要安装的是bzip2的库。

--enable-sdl2的时候。因为开始设定的mingw64使用的msvc作为link工具。所以注意:

SDL2-devel-2.0.12-VC.zip (Visual C++ 32/64-bit)
SDL2-devel-2.0.12-mingw.tar.gz (MinGW 32/64-bit)

要下载vc的,不能下载mingw的。但是pk-config文件夹里面的pc文件要用ming里面的,借用一下。如果提示找不到mingw32.lib这时候要修改下sdl2.pc文件。把最后两行改一下

原来的是这样的:

Libs.private: -lmingw32 -lSDL2main -lSDL2 -mwindows  -Wl,--no-undefined -Wl,--dynamicbase -Wl,--nxcompat -Wl,--high-entropy-va -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid -static-libgcc
Cflags: -I${includedir}/SDL2  -Dmain=SDL_main

修改为:

Libs: -L${libdir}   -lSDL2
Libs.private:
Cflags: -I${includedir}/SDL2

fftools/ffprobe.c(3047): error C2001: 常量中有换行符

我就把这一行ffprobe.c的3047行打印字符给注释了,两处代码:

//av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);

//print_str("compiler_ident", CC_IDENT);

还有如下报错:也是因为CC_IDENT引起的,解决方法就是上面注释

fftools/cmdutils.c(1119): error C2065: “slib”: 未声明的标识符
fftools/cmdutils.c(1119): error C2296: “%”: 非法,左操作数包含“char [138]”类型
fftools/cmdutils.c(1119): error C2059: 语法错误:“数字上的错误后缀”
fftools/cmdutils.c(1119): error C2059: 语法错误:“%”
fftools/cmdutils.c(1119): error C2017: 非法的转义序列
fftools/cmdutils.c(1119): error C2001: 常量中有换行符
fftools/cmdutils.c(1150): error C2143: 语法错误: 缺少“)”(在“*”的前面)
fftools/cmdutils.c(1150): error C2143: 语法错误: 缺少“{”(在“*”的前面)
fftools/cmdutils.c(1150): error C2059: 语法错误:“)”
fftools/cmdutils.c(1151): error C2054: 在“options”之后应输入“(”
fftools/cmdutils.c(1252): error C2143: 语法错误: 缺少“)”(在“*”的前面)
fftools/cmdutils.c(1252): error C2143: 语法错误: 缺少“{”(在“*”的前面)
fftools/cmdutils.c(1252): error C2059: 语法错误:“)”
fftools/cmdutils.c(1253): error C2054: 在“avclass”之后应输入“(”
fftools/cmdutils.c(1261): error C2275: “AVInputFormat”: 将此类型用作表达式非法

 

写了个简要说明,避免大家以后走弯路。呵呵

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows下编译64位ffmpeg的问题。以64位 zlib为例 的相关文章

  • 你知道 Windows 上有类似的 wc(unix 字数统计命令)程序吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 快速搜索给了我陶巴瓦厕所 http www tawbaware com wc htm 但它不接受 std
  • 我如何移动粘性/捕捉 wpf 窗口

    当我移动 主 窗口时 我想移动两个或更多粘性窗口 我想做这样的事情 private void MainWindow PreviewMouseMove object sender MouseEventArgs e if e LeftButto
  • 如何检测Windows版本是否合法? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对获取版本信息不感兴趣 我想做的就是确保我的应用程序只能在合法版本的 Windows 上运行 而不是在盗版版本上运行 Windows 使
  • 64 位大型 malloc

    malloc 失败的原因是什么 尤其是在 64 位中 我的具体问题是尝试在 64 位系统上分配一大块 10GB RAM 该机器有 12GB RAM 和 32GB 交换空间 是的 malloc 是极端的 但是为什么它会成为一个问题呢 这是在带
  • Windows平台下C语言控制串口DTR和RTS引脚

    如何在windows平台上控制串口的DTR和RTS引脚 我希望通过升高或降低电压来对其进行位敲击或操作 您需要使用EscapeComm 函数 https learn microsoft com en us windows desktop a
  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • subprocess.Popen('start') 失败

    在 python 中运行此命令将导致 WindowsError 指出找不到指定的文件 FAILS import subprocess subprocess Popen start notepad exe 在命令窗口中 它可以工作 start
  • Windows 和 python 3.2 的 Pylint 安装问题

    当我尝试使用 pip 在 Windows 上安装 pylint 时 我遇到了这个问题 我真的不知道它来自哪里 C Python33 Scripts gt pip exe install pylint Downloading unpackin
  • 为 Windows 98 编译 Qt

    我需要支持 Windows 98 Qt 文档声称这是可能的 但没有说明 Qt 4 6 的分布式二进制文件不能在 Win98 上运行 而且我采样的大多数 Qt 应用程序也不能在 Win98 上运行 对于几个确实在 98 上运行的应用程序 我询
  • 如何在子 shell 中运行 cmd.exe 批处理文件

    我有一个批处理文件 通常像这样调用 longjob cmd gt result txt 2 gt 1 这工作正常 但脚本在执行过程中更改了目录 将我的 shell 留在该目录中 这很麻烦 有没有办法在子 shell 中运行命令 同时仍然允许
  • Windows 睡眠功能极慢

    我正在通过 Windows h 使用 Sleep 命令制作一个程序 并且在 Windows 10 而不是 Windows 7 上运行我的程序时遇到了令人沮丧的差异 我将我的程序简化为下面的程序 它与我的更复杂的程序表现出相同的行为 在 Wi
  • 如何使用 python 在 Windows 中禁用/启用特定 USB 端口? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在图形窗口中创建一个切换开关 可以使用 python 禁用 启用 Windows 中的特定 USB 端口 我可以使用哪个外部命令或
  • 提取证书中主题属性的所有值

    我目前正在使用CertGetNameString http msdn microsoft com en us library windows desktop aa376086 28v vs 85 29 aspx提取每个主题属性的值 如下所示
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • Jenkins 可以检测到任何 svn 用户每次提交代码吗?

    Jenkins 可以检测到任何 svn 用户每次提交代码吗 我想知道每次 Jenkins 提交 svn user 时 有什么方法或 jenkins 插件吗 现在我用svn updateJenkins 中的 cmd 来更新 svn 您可以按照
  • 在Windows 7上安装curl后缺少libcurl-4.dll

    按照这个人的安装curl后指示 https stackoverflow com a 28757477 1186038 除了第 2 步 已安装Win64 OpenSSL v1 0 1u 轻型相反 因为下载页面中缺少版本 k http slpr
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将
  • 在 macOS 上为 MoviePy 安装 ffmpeg 失败并出现 SSL 错误

    我正在尝试编写一个 Python 程序 在 Mac OS 10 11 16 上使用 MoviePy 将 MP4 文件转换为 GIF 我用 import moviepy editor as mp 我收到一条错误消息 说我需要打电话imagei
  • 无法加载 JNI 共享库 (JDK)

    当我尝试打开时Eclipse http www eclipse org 弹出对话框指出 无法加载 JNI 共享库 C JDK bin client jvm dll 此后 Eclipse 强制关闭 我想提出以下几点 我检查了这条路径上是否存在
  • 如何使用 Win32 API 与 com 端口 (RS232) 通信

    我正在尝试使用 win32 API 与 com 端口对话 我找到了这个http www robbayer com files serial win pdf http www robbayer com files serial win pdf

随机推荐