1

/INCREMENTAL:NOビジュアル c のリリース構成のデフォルトです。

http://ffmpeg.zeranoe.com/builds/FFmpeg git-3efe5e3 32-bit Devからダウンロードしました。ファイルが含まれています。を選びました。コンパイル後、ffmpeg dll のインポート テーブルが空になり、プログラムがクラッシュします。を有効にすると、コンパイルして正常に実行されます。.dll.a.lib.lib/INCREMENTAL

test.c:

void av_register_all();

int main() {
    av_register_all();
    return 0;
}

_

lib>cl test.c /link /incremental:no avformat.lib ws2_32.lib
lib>dumpbin /IMPORTS test.exe
...
    avformat-55.dll
                4080F4 Import Address Table
                4095E4 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference


    KERNEL32.dll
                408000 Import Address Table
                4094F0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                  143 GetCurrentProcessId
                  110 GetCommandLineA
                  216 HeapFree
...
4

1 に答える 1

1

binutilsこれは、 FFmpeg の Zeranoe ビルドで使用されている既知のバグです。Microsoft Visual Studio のリリース ビルドでは、デフォルトで [リンカー オプション] > [最適化] > [参照] =/OPT:REFですべての FFmpeg 参照が削除されるため、dumpbin /IMPORTS.

指示4.2.1 Linking to FFmpeg with Microsoft Visual C++に従う必要があります。2 つのオプションがあります。実行ファイルのサイズが大きくなるため推奨されていないリンカ オプションを指定/OPT:NOREFして、実行ファイルの初期ロード時間を増やしてください。または、たとえば x86_64 の場合、から新しい.libおよび.expファイルを生成します。.def

lib /machine:x64 /def:avcodec-55.def /out:avcodec.lib
lib /machine:x64 /def:avdevice-55.def /out:avdevice.lib
lib /machine:x64 /def:avfilter-4.def /out:avfilter.lib
lib /machine:x64 /def:avformat-55.def /out:avformat.lib
lib /machine:x64 /def:avutil-52.def /out:avutil.lib
lib /machine:x64 /def:postproc-52.def /out:postproc.lib
lib /machine:x64 /def:swresample-0.def /out:swresample.lib
lib /machine:x64 /def:swscale-2.def /out:swscale.lib

もう 1 つのオプションは、自分で FFmpeg をビルドすることです。

もう 1 つのオプションは、FFmpeg 開発者コミュニティに参加して、ビルド システムを autotools/autoconf/automake から CMake に移動することです。

モデレーターの皆さん、私の片言英語を直してください。

于 2014-02-03T13:09:34.217 に答える