You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Conan交叉编译FFmpeg失败:x86_64-w64-mingw32-ld不识别-m64模式

解决Conan交叉编译FFmpeg至Windows时的-m64参数问题

1. 确认MinGW工具链版本正确性

  • 确保安装的是64位MinGW-w64工具链,Ubuntu下可通过sudo apt install gcc-mingw-w64-x86-64安装,避免误装32位版本。
  • 验证工具链目标架构:执行x86_64-w64-mingw32-gcc -v,确认输出中target字段为x86_64-w64-mingw32,而非i686类32位目标。

2. 在conanfile.py中显式覆盖链接器参数

直接在编译配置中指定适配MinGW-w64的链接器模拟模式,替代默认的-m64:

from conan import ConanFile
from conan.tools.cmake import CMakeToolchain, CMake

class FFmpegBuildConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"

    def generate(self):
        tc = CMakeToolchain(self)
        # 强制设置链接器使用i386pep模式(适配x86_64 MinGW-w64)
        tc.variables["CMAKE_EXE_LINKER_FLAGS"] = "-mi386pep"
        tc.variables["CMAKE_SHARED_LINKER_FLAGS"] = "-mi386pep"
        tc.variables["CMAKE_MODULE_LINKER_FLAGS"] = "-mi386pep"
        tc.generate()

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

3. 修改Conan全局配置移除默认-m64

编辑~/.conan/settings.yml,找到arch下的x86_64对应gcc的配置,替换默认flags:

settings:
  arch:
    x86_64:
      compiler:
        gcc:
          flags:
            - "-mi386pep"

4. 直接修改FFmpeg configure脚本(应急方案)

如果以上方法无效,手动修改FFmpeg的configure脚本:

  • 找到脚本中ldflags="$ldflags -m64"的行,替换为ldflags="$ldflags -mi386pep"
  • 或直接在运行configure时传递参数:
./configure --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32 --arch=x86_64 --ldflags="-mi386pep"

5. 使用自定义CMake工具链文件

创建mingw-cross-toolchain.cmake:

set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)

# 指定链接器模拟模式
set(CMAKE_EXE_LINKER_FLAGS "-mi386pep" CACHE STRING "")
set(CMAKE_SHARED_LINKER_FLAGS "-mi386pep" CACHE STRING "")
set(CMAKE_MODULE_LINKER_FLAGS "-mi386pep" CACHE STRING "")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

然后在conanfile.py中指定使用该工具链:

def generate(self):
    tc = CMakeToolchain(self)
    tc.toolchain_file = "mingw-cross-toolchain.cmake"
    tc.generate()

内容的提问来源于stack exchange,提问作者ovni jeroqui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:19:56