zoukankan      html  css  js  c++  java
  • 编译vs下可调试的ffmpeg和x264

    以前随手记的笔记,翻出来,整理下哈

    ffmpeg 在windows上的编译还是比较麻烦的,而且如果mingw-gcc编译的话,是无法在vs下调试的

    所以以前刚开始玩ffmpeg的时候,费了一些功夫,用vs编译调试ffmpeg,当然在mingw下调试也是可以的。

    由于是之前的笔记,所以有些地方不是很详细,主要记录了一些关键的地方。

    也可以直接下载编译配置好的vs2013工程

    一、准备工具

      1. msysgit 环境,https://github.com/msysgit/msysgit/

      2. 然后下载yasm,pkg_config,glib的windows版,放置于bin目录下

         yasm 可以直接从官网下载,下载Win64 .exe 版本(vs版本有问题). 下载后改名为yasm.exe

         pkg_config, http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip

         glib,http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip

    二、编译ffmpeg

      1. 搜索mingw中的link.exe, 改名或删掉,因为和vs的link冲突

      2. 

    export PKG_CONFIG_PATH=/mingw/lib/pkgconfig:/usr/local/lib/pkgconfig
    
    call "C:Program Files (x86)Microsoft Visual Studio 12.0VCinvcvars32.bat"

      3. configure ffmpeg,默认的编译参数是O2优化,这样不太方便调试

     ./configure --enable-shared --enable-memalign-hack --enable-gpl --enable-libx264 --enable-postproc --prefix=./vs2013_build/Release --toolchain=msvc --extra-cflags=-Id:/code/libx264 --extra-ldflags=-LIBPATH:d:/code/libx264 
    

      尝试禁用优化,编译时会产生大量错误,所以使用O1优化,这样调试的时候还是不会被优化太多

     ./configure --enable-shared --enable-memalign-hack --enable-gpl --enable-libx264 --enable-postproc --prefix=./vs2013_build/Debug --toolchain=msvc  --disable-optimizations --disable-stripping  --enable-debug --optflags='-O1 -Zo -arch:SSE2' --extra-cflags='-Gy -MDd -Id:/code/libx264' --extra-ldflags='-OPT:REF -DEBUG   -VERBOSE -LIBPATH:d:/code/libx264'

    O1 优化,会把local variable优化掉,其他应该没太大影响

    -Zo参数 (vs2012中是/d2Zi+) 允许运行在优化模式下调试(注意不能删除config.mk中/Z7参数)

    /Gy Enables function-level linking.
    -arch::SSE2 解决SSE MMX等指令无法link.

    四、 编译好的lib嵌入到VS工程中,还需要做些修改

    error C2054: expected '(' to follow 'inline'
    error C2085: 'av_cmp_q' : not in formal parameter list
    直接改project->[setting]->[c/c++]->Preprocessor definitions:编辑框里输入inline=__inline即可。
    inline=__inline

    还需要定义
    snprintf=_snprintf

    ffplay.c 中cmdutils.c print_all_libs_info
    注释
    //PRINT_LIB_INFO(avresample, AVRESAMPLE, flags, level);
    //PRINT_LIB_INFO(postproc, POSTPROC, flags, level);

    修改 config.h
    #define HAVE_STRUCT_POLLFD 1

    五、编译x264

      msysgit 以-enable-win32thread 参数编译就不会依赖libgcc 和pthread

    ./configure --enable-shared --host=i686-pc-mingw32
     --enable-static --enable-win32thread  
    pexports libx264-142.dll > libx264-142.def 
    lib /machine:X86 /def:libx264-142.def

    msys编译的话,会有个问题是gcc版本太老了。

    另外msysgit,中可能需要删除configure中一些gcc编译参数 -Wl,--nxcompat -Wl,--dynamicbase,否则可能导致gcc无法识别。报错为 no working c compiler 的错误

  • 相关阅读:
    java 环境变量
    maven配置国内镜像库
    swagger ui
    jenkins systemctl启动失败
    gradle 错误
    jenkins 自动构建gitlab项目
    git
    Spinnaker 介绍
    openstack 基础服务软件安装配置(queens,centos-7)
    openstack-nova(queens)
  • 原文地址:https://www.cnblogs.com/lingdhox/p/5746170.html
Copyright © 2011-2022 走看看