Я создаю статические библиотеки 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"
, но это не поможет.