Visual Studio 2010のC++プロジェクトでFFmpegを使用しようとしています。ライブラリを静的にリンクされたファイルとして含めたいです。 libavcodec/api-example.c のような単純なプログラムはエラーなしでコンパイルされ、起動時にエラービューにリンカーエラーは表示されません。ただし、アプリケーションを起動すると、avutil-51.dllが見つからないというメッセージボックスが表示されます。それを修正する方法についてのヒントはありますか?
http://ffmpeg.zeranoe.com/builds/ から最新の開発ビルドを使用しました。次に、追加のインクルードディレクトリとしてインクルード、avcodec.lib; avfilter.lib; avformat.lib; avutil.libを追加の依存関係として指定し、libを追加のライブラリディレクトリとして指定しました。
FFmpegを使用すると、次のいずれかを実行できます。
上記の項目1に従ってプロジェクトを構築しました。バイナリを使用するには、av * .dll依存ファイルを使用して再配布する必要があります。
Zeranoe の「静的」は、ライブラリがffmpeg.exe
などのバイナリに静的にリンクされることを意味します。これを、バイナリにリンクする静的.lib
ライブラリと混同しないでください。 Zeranoeはそのようなものを提供しません。
Zeranoe では、次のようなアーカイブがあります。
bin/avcodec-54.dll
bin/avutil-51.dll
lib/avcodec.lib
lib/avutil.lib
「共有」アーカイブには、DLLライブラリへのダイナミックリンクでビルドされたFFmpegがあります。「Dev」アーカイブには、ffmpeg.exeのようにプロジェクトで使用できるlibファイルがあります。共有アーカイブで行います。
したがって、Visual Studioプロジェクトは次のように簡単にできます( ここで完全なソースを参照 ):
extern "C"
{
// NOTE: Additional directory ..\zeranoe.com\dev\include gets to the files
#include "libavcodec\avcodec.h"
}
// NOTE: Additional directory ..\zeranoe.com\dev\lib gets to the files
#pragma comment(lib, "avcodec.lib")
// NOTE: Be sure to copy DLL files from ..\zeranoe.com\shared\bin to the directory of
// the FFmpegApp.exe binary
int _tmain(int argc, _TCHAR* argv[])
{
_tprintf(_T("Trying avcodec_register_all... "));
avcodec_register_all();
_tprintf(_T("Done.\n"));
return 0;
}
Visual Studioプロジェクトのdev
サブディレクトリに「Dev」アーカイブを抽出し、追加のインクルードパスにdev\include
を追加します。バイナリをビルドするにはこれで十分であり、av*.dll
に依存します。
これは、「共有」アーカイブを抽出し、そのbin
からバイナリのディレクトリにDLLをコピーするときです。そして、そこからアプリが動作します:
C:\FFmpegApp\Release>FFmpegApp.exe
Trying avcodec_register_all... Done.
2016年1月20日更新:リポジトリ内のプロジェクトはVisual Studio 2013(以前のVS 2010コード)にアップグレードされ、現在のZeranoeビルドに対してチェックされます。サンプルと指示は良好な状態のままです。
Visual StudioのWin32
ビルドでは、Zeranoeの32ビットファイルを使用することを前提としています。 64ビットバージョンをビルドするには、それぞれのファイルをダウンロードしてVisual C++プロジェクトをそれぞれセットアップし、x64
をビルドします(または、両方をダウンロードして、両方の構成をセットアップし、それぞれinclude/libパスを構成します)。以下のコメントに記載されているように、ビット数の一致に失敗するとエラーが発生します。