2016-03-24 6 views
0

Я создаю статические библиотеки FFmpeg для Windows 64 бит. Конфигурирование следующим образом:Построение статических FFmpeg-библиотек для Windows 64-разрядных приложений

./configure --disable-everything --enable-static --disable-shared --enable-memalign-hack --disable-debug --enable-stripping --enable-protocol=file --enable-yasm --enable-decoder=mp3,mpeg4,h264 --enable-muxer=mp4,avi --enable-encoder=mjpeg.

Приложение построено в Visual Studio 2012 с опцией /MT и связаны с libavformat.a, libavcodec.a и т.д. Я также связать его с libmingwex.a, libgcc.a.

линкер выдает следующие ошибки:

6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__wrmdir 
6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__rmdir 
6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__wunlink 
6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__unlink 
6>libavutil.a(time.o) : error LNK2001: unresolved external symbol clock_gettime 
6>libavutil.a(time.o) : error LNK2001: unresolved external symbol nanosleep 

Что касается 2-х последних ошибок, я могу решить их вручную, определяющих макросы в config.h: #define HAVE_NANOSLEEP 1 и #define HAVE_CLOCK_GETTIME 1.

Вопрос в том, как решить первые 4. Они выглядят как функции, импортированные из dll (__imp префикс), но мое приложение построено с /MT, и я не хочу никаких динамических зависимостей в FFmpeg. Как избавиться от них?

Я попытался настроить FFmpeg на --extra-cflags="-static", но это не поможет.

ответ

0

Оказалось, что теперь возможно build FFmpeg with Visual Studio tool chain, изначально. Таким образом, все проблемы, связанные с MinGW, больше не актуальны.

Для версий до 2013 года VS, которые не имеют достойной поддержки C99, требуется скачать c99wrap.exe, c99conv.exe и inttypes.h. Затем откройте командную строку Visual Studio native x64 (так, чтобы цепочка инструментов VC и заголовки находились на пути поиска) и вызывают ./configure --toolchain=msvc и make.