使用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
相关产品推荐
相关产品推荐

