You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Cygwin环境编译FFmpeg时出现GUID_NULL未定义引用问题求助

解决FFmpeg编译时GUID_NULL未定义引用的问题

首先,这个错误的核心是链接器找不到GUID_NULL符号——尽管你的libavdevice.pc里已经包含了-luuid(该符号属于uuid库),但大概率是链接顺序、库安装完整性或configure缓存的问题导致符号无法被正确解析。下面是几个可行的解决思路:

  • 强制指定晚链接uuid库
    链接器对库的顺序非常敏感,依赖符号的目标文件必须在提供符号的库之前出现。你可以在configure命令中额外添加--extra-ldflags="-luuid",强制让链接器在后期处理uuid库,确保所有引用该符号的目标文件都已被处理:

    ./configure --disable-stripping --enable-debug=3 --extra-cflags="-g" --disable-optimizations --extra-ldflags="-luuid"
    

    之后执行make clean && make重新编译试试。

  • 验证uuid开发库是否正确安装
    在Cygwin环境下,先确认uuid-devel开发包已经安装。你可以通过以下命令检查:

    pkg-config --exists uuid && echo "uuid开发包已安装" || echo "uuid开发包缺失"
    

    如果显示缺失,用Cygwin的包管理器安装uuid-devel,再重新运行configure和make。

  • 清除configure缓存重新配置
    有时候configure的缓存文件会保留旧的链接参数,导致新设置不生效。先删除config.cache文件,再重新执行configure命令:

    rm config.cache
    ./configure --disable-stripping --enable-debug=3 --extra-cflags="-g" --disable-optimizations
    
  • 手动调整libavdevice的链接参数
    进入libavdevice目录,打开Makefile找到LIBS变量行,确认-luuid确实存在,并且将其移到变量的末尾位置(确保所有依赖它的目标文件都在库之前被链接)。修改后回到FFmpeg根目录重新运行make

  • 检查源代码中的头文件引用
    虽然编译阶段没有报错,但可以确认dshow_enummediatypes.c中是否包含了<uuid/uuid.h>头文件。如果没有添加,手动加入后重新编译该模块:

    #include <uuid/uuid.h>
    

    然后继续执行make完成编译。

内容的提问来源于stack exchange,提问作者John Ernest

火山引擎 最新活动