3

Visual Studio 2017 Community で C++ の ffmpeg ライブラリの libavcodec を使用しようとしています。最新の x64 dev と共有ビルドを zeranoe (バージョン 20171217) からダウンロードし、Visual Studio で x64 ビルド用のインクルード ディレクトリと追加ライブラリをセットアップし、共有パッケージから DLL ファイルを PATH に追加しました。

これは私のサンプルテストコードです:

extern "C" {
#include <libavcodec\avcodec.h>
}
int main() {
    avcodec_register_all();
    AVFrame *pAvFrame = av_frame_alloc();
    av_frame_free(&pAvFrame);
    return 0;
}

コードは問題なくコンパイルされますが、アプリケーションを実行すると、ダイアログ ウィンドウに「av_frame_alloc のプロシージャ エントリ ポイントが DLL に見つかりませんでした」というエラー メッセージが表示されます (実際のメッセージは英語ではなく、翻訳されたバージョンです)。

同様の質問でアドバイスされているように、Linker->Optimization->References を /OPT:NOREF に設定しようとしましたが、役に立ちませんでした。

依存関係ウォーカーは、av_frame_alloc がエクスポートされ、「エントリ ポイント」がバインドされていないことを示しています。av_frame_alloc が avcodec-58.dll (赤色) と avutil-56.dll (緑色) の両方に表示されるのは少し奇妙です。アプリケーションが avutil ではなく avcodec からこの関数を取得しようとしていることが原因かもしれませんが、これらのライブラリのソース コードを確認していないため、わかりません。

問題は、VS2017 でこのような単純な FFMPEG ベースの C++ プロジェクトをセットアップする方法です。どこが間違っていますか?

アップデート。1.

リンカー フラグ: /OUT:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.exe" /MANIFEST /NXCOMPAT /PDB:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pdb" / DYNAMICBASE "c:\work\dev\ffmpeg-20171217-387ee1d-win64-dev\lib*.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" " advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG:FULL /MACHINE:X64 /OPT:NOREF /PGD:" C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Release\TestFfmpeg.exe.intermediate.manifest" /OPT :ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1

4

1 に答える 1