【问题标题】:Link ffmpeg lib statically in Visual Studio在 Visual Studio 中静态链接 ffmpeg lib
【发布时间】:2014-11-15 13:40:01
【问题描述】:

我正在尝试在VS2010上的C++项目中使用ffmpeg,而ffmpeg dev版本提供了.h文件的lib。我在我的项目中链接了这些 .lib,运行 .exe 文件时需要相应的 .dll。但我想静态链接ffmpeg lib并在没有.dll的情况下运行。

我尝试在 windows 上使用 Mingw 编译 ffmpeg 源代码,结果只生成了一些 .a 存档文件。如何获取 ffmpeg 静态 .lib 文件?而且它是一个 64 位的程序,所以需要 64 位的静态库。

【问题讨论】:

    标签: windows visual-studio-2010 ffmpeg static-libraries


    【解决方案1】:

    在您的输出目录中,您有一些*.def 文件。您可以使用这些文件来获取您的*.lib 文件。语法是:

    lib /def:avcodec-54.def /out:avcodec-54.lib
    

    使用您的 VS 版本的 lib.exe。我的位于C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin。检查命令行选项(添加/machine:i386很有用)。

    另一种方法:不要直接使用windows的cmd来启动msys/mingw,而是先启动VS命令提示符(你可以从开始菜单启动它)。它将设置一些环境变量。从这里开始,使用 msys/mingw 编译 FFmpeg:FFmpeg build 将自动检测 VS 是否存在,因此将自动执行 libcall。

    编辑:抱歉,我跳过了问题的“静态”部分。以下是静态构建的一些技巧(请注意,我从未构建过在 Visual Studio 中使用的静态 FFmpeg,所以它可能不起作用)。 首先,当然,FFmpeg 必须使用静态选项构建:为了确定,我使用这些选项,所以我没有共享文件的 .def:

    ./configure --enable-static --disable-shared [other options]
    

    为了拥有静态文件,您可以直接使用 .a 文件(再次重申:我从未尝试过这个)。检查this question

    如果还是不行,你可以试试visual studio的toochain,而不是gcc。但要小心:上次我尝试这个(但共享 dll)时,从 msvc 构建时 FFmpeg 解码比 gcc 的输出慢。查看this page 了解详细的构建说明。

    【讨论】:

    • 感谢您的回答。其实我是按照你说的第二种方式编译的ffmpeg,只得到*.def文件和*.a类型的静态库。我按照你说的第一种方式尝试了lib.exe将*.def传输到*.lib,并生成了*.lib文件。但根据文件大小,它们似乎不是静态库文件。它们与与 *.dll 文件一起使用的 *.lib 文件具有相应的相同大小。
    • 我完全错过了“静态”点,抱歉。我用一些链接更新了我的答案,但我自己从来没有这样做过。
    • 再次感谢您的帮助,我已经差不多知道如何在windows下编译ffmpeg了,我会尝试这两种获取静态*.lib文件的方法。
    猜你喜欢
    • 2011-06-15
    • 2020-02-18
    • 1970-01-01
    • 2012-09-30
    • 2018-08-09
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多