вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: ProgrammerCPP  
Дата: 04.01.23 20:57
Оценка:
Периодически пытаюсь разобраться с библиотекой ffmpeg
Компилю её в системе MSYS64

./configure \
--toolchain=msvc \
--prefix=./build \
--disable-doc \
--target-os=win64 \
--arch=x86_64 \
--disable-x86asm

make
make install

потом меняю расширение
mv ./build/lib/libavcodec.a ./build/lib/libavcodec.lib
mv ./build/lib/libavdevice.a ./build/lib/libavdevice.lib
mv ./build/lib/libavfilter.a ./build/lib/libavfilter.lib
mv ./build/lib/libavformat.a ./build/lib/libavformat.lib
mv ./build/lib/libavutil.a ./build/lib/libavutil.lib
mv ./build/lib/libswresample.a ./build/lib/libswresample.lib
mv ./build/lib/libswscale.a ./build/lib/libswscale.lib

Затем подключаю к своему проекту.
В результате получаю ошибки и предупреждения:
error LNK2019: ссылка на неразрешенный внешний символ avcodec_find_encoder в функции
libavcodec.lib : warning LNK4272: тип компьютера библиотеки "x86" конфликтует с типом целевого компьютера "x64"

Выше я указал ключи для configure, благодаря которым всё должно быть нормально.
Что пошло не так?
Посоветуйте, пожалуйста, универсальный алгоритм выхода из этой ситуации.
Меня интересует смысл, а не результат
Re: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: wander  
Дата: 04.01.23 22:24
Оценка: +1
Здравствуйте, ProgrammerCPP, Вы писали:

PCP>Меня интересует смысл, а не результат


Смысл в том, что MSYS собирает библиотеки с помощью MinGW, а подключать вы их собрались в MSVC.
Бинарники от MinGW бинарно несовместимы с MSVC и банальной сменой расширения вы этой совместимости не достигните.
Re: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: CreatorCray  
Дата: 04.01.23 22:25
Оценка:
Здравствуйте, ProgrammerCPP, Вы писали:

PCP>error LNK2019: ссылка на неразрешенный внешний символ avcodec_find_encoder в функции

Такая ошибка одна или их много?
Надо бы посмотреть есть ли такой символ в получившейся либе.

PCP>libavcodec.lib : warning LNK4272: тип компьютера библиотеки "x86" конфликтует с типом целевого компьютера "x64"

Походу собрало её как x86 наплевав на --arch, что странно.

PCP>Меня интересует смысл, а не результат

Ээээ..?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: wander  
Дата: 04.01.23 22:26
Оценка: +2
Здравствуйте, ProgrammerCPP, Вы писали:

PCP>Посоветуйте, пожалуйста, универсальный алгоритм выхода из этой ситуации.


Всегда собирать библиотеки тем компилятором, в котором собрались их использовать.
Re[2]: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: CreatorCray  
Дата: 04.01.23 22:27
Оценка:
Здравствуйте, wander, Вы писали:

W>Смысл в том, что MSYS собирает библиотеки с помощью MinGW

а --toolchain=msvc тогда что означает?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[3]: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: wander  
Дата: 04.01.23 22:28
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>а --toolchain=msvc тогда что означает?


Может и ничего.
Потому что MSYS`овский сборщик вполне мог это проигнорировать вообще.
Логи надо смотреть.
Re[4]: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: CreatorCray  
Дата: 04.01.23 22:30
Оценка:
Здравствуйте, wander, Вы писали:

W>Потому что MSYS`овский сборщик вполне мог это проигнорировать вообще.

Очень похоже на то, ибо там походу ещё и --arch=x86_64 проигнорировано
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[5]: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: wander  
Дата: 04.01.23 22:32
Оценка: +3
CreatorCray

Я как минимум исхожу из того, что при правильном тулчейне ну никак не могли получиться на выходе .a файлы.
Re: вопрос о подключении библиотек ffmpeg к проекту в среде
От: Videoman Россия https://hts.tv/
Дата: 04.01.23 23:55
Оценка:
Здравствуйте, ProgrammerCPP, Вы писали:

PCP>Что пошло не так?

PCP>Посоветуйте, пожалуйста, универсальный алгоритм выхода из этой ситуации.
PCP>Меня интересует смысл, а не результат

Вообще, нормальная (безглючная с точки зрения конфигурации и флагов) компиляция под MSVC не тривиальная задача для ffMpeg. Проект очень древний, заточен под make, который VS не поддерживается. Если release сборка под MinGW делается, то заставить сделать debug c генерацией pdb, мне не удалось. От сюда вопрос, какая стоит задача ?
1. Если просто нужны новые lib и dll, то проще взять готовые.
2. Если нужна рабочая debug сборка с возможностью отладки, то никакого нормального способа сгенерировать ffmpeg, кроме как создать проект для MSVC, мне не известен.
3. Какая-то ещё задача ?...

P.S. По вашим симптомам, с MinGW, могу лишь сказать, что toolchain у вас не зацепился и судя по расширениям генерируется версия под Linux.
Отредактировано 04.01.2023 23:55 Videoman . Предыдущая версия .
Re: вопрос о подключении библиотек ffmpeg к проекту в среде
От: sergey2b ЮАР  
Дата: 05.01.23 01:14
Оценка:
если не секрет для чего вы хотите его собрать ? мне не удалось скомпилировать debug версию как я не пытался

я пересобирал тк мне надо было добавить несколько функций которые возращают внутренние структуры кодека
и собрать с поддердкой Intel and nvidia GPU

я вначале пользовался подобной инстуркцией http://www.rangelreale.com/2017/06/building-ffmpeg-x264-using-visual-studio-2015
и https://pracucci.com/compile-ffmpeg-on-windows-with-visual-studio-compiler.html (надо внимательно прочесть коментарии там есть коррекция процесса сборки)
мне удалось собрать но были проблеммы с линковокой


но потом собрал этим или поднобным скриптом
https://github.com/rdp/ffmpeg-windows-build-helpers (вот еще один https://github.com/markus-perl/ffmpeg-build-script)

сборка была под linux для винды с поддержкой gpu and etc
Отредактировано 05.01.2023 1:36 sergey2b . Предыдущая версия . Еще …
Отредактировано 05.01.2023 1:33 sergey2b . Предыдущая версия .
Отредактировано 05.01.2023 1:22 sergey2b . Предыдущая версия .
Re[4]: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: sergey2b ЮАР  
Дата: 05.01.23 01:42
Оценка:
Здравствуйте, wander, Вы писали:

CC>>а --toolchain=msvc тогда что означает?


W>Может и ничего.

W>Потому что MSYS`овский сборщик вполне мог это проигнорировать вообще.


по данной инструкции все собирает нормально
https://pracucci.com/compile-ffmpeg-on-windows-with-visual-studio-compiler.html

и флаг --toolchain=msvc нормально работает
но только там другие проблеммы возникают
Re[2]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: sergey2b ЮАР  
Дата: 05.01.23 01:46
Оценка: +1
Здравствуйте, Videoman, Вы писали:


V>3. Какая-то ещё задача ?...


бинарники выложенные в инете
не поддерживают intel GPU
Re[2]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: Doom100500 Израиль  
Дата: 05.01.23 07:49
Оценка:
Здравствуйте, Videoman, Вы писали:


V>Проект очень древний, заточен под make, который VS не поддерживается


Visual Studio 2017 поддерживат проекты Makefile.
Называется Makefile project.

Это не оно?
Спасибо за внимание
Re[2]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: ProgrammerCPP  
Дата: 05.01.23 09:21
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>если не секрет для чего вы хотите его собрать ?


Мне нужно разобраться с этим глюком. Может быть есть какие-то ключи,
которые заставят распечатать на экране всю нужную инфу: разрядность, тип библиотеки, платформу и совместимость с msvc.
Может есть какие-то утилиты, книги или статьи. Ну, хотя бы конкретное объяснение. Типа, в libe функция в такой кодировке, а должна быть
в такой-то.
Re[3]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: Videoman Россия https://hts.tv/
Дата: 05.01.23 10:12
Оценка:
D>Это не оно?

не-а!
Re[3]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: Videoman Россия https://hts.tv/
Дата: 05.01.23 10:17
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>бинарники выложенные в инете

S>не поддерживают intel GPU

Согласен, проблема лицензий и т.д. Теоретически, с такой поддержкой, можно найдти, а вот полноценный Debug — увы!

P.S. Сейчас всё отлажено и проблем не возникает, но в самом начале, приходилось месяцами сидеть а исходниках ffmpeg.
Re[3]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: sergey2b ЮАР  
Дата: 05.01.23 12:36
Оценка:
Здравствуйте, ProgrammerCPP, Вы писали:

PCP>Может есть какие-то утилиты, книги или статьи. Ну, хотя бы конкретное объяснение. Типа, в libe функция в такой кодировке, а должна быть

PCP>в такой-то.

компилятор в VS достаточно сильно отличаеться от gcc
поэтому откомпилировать вы сможете только gcc

попробуйте https://pracucci.com/compile-ffmpeg-on-windows-with-visual-studio-compiler.html
в этом варианте как я понял используеться линкер от MS
Re[4]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: ProgrammerCPP  
Дата: 05.01.23 13:05
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>компилятор в VS достаточно сильно отличаеться от gcc

S>поэтому откомпилировать вы сможете только gcc

А причём тут линкер?
Несовместимость форматов выходных файлов — это всего лишь версия.
Её нужно как-то подтвердить или опровергнуть.

Использую утилиту dumpbin.exe

dumpbin.exe -headers libavcodec.lib > libavcodec-export.txt

Печатает:
Microsoft (R) COFF/PE Dumper Version 14.32.31328.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file libavcodec.lib

File Type: LIBRARY

FILE HEADER VALUES
14C machine (x86)
9 number of sections
63B595D6 time date stamp Wed Jan 4 18:05:58 2023
E8BE file pointer to symbol table
1B number of symbols
0 size of optional header
0 characteristics
...

То есть с форматом файла совместимость есть.

Что печатает configure:

# ./configure \
--toolchain=msvc \
--prefix=./build \
--disable-doc \
--target-os=win64 \
--arch=x86_64 \
--disable-x86asm
install prefix ./build
source path .
C compiler cl.exe
C library msvcrt
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
standalone assembly no
x86 assembler nasm
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AESNI enabled yes
AVX enabled yes
AVX2 enabled yes
AVX-512 enabled yes
AVX-512ICL enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast no
EBX available no
EBP available no
debug symbols yes
strip symbols no
optimize for size no
optimizations yes
static yes
shared no
postprocessing support no
network support yes
threading support w32threads
safe bitstream reader yes
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled no
makeinfo supports HTML no
xmllint enabled yes

External libraries:
mediafoundation schannel

External libraries providing hardware acceleration:
cuda_llvm d3d11va dxva2

Libraries:
avcodec avfilter avutil swscale
avdevice avformat swresample

Programs:
ffmpeg ffprobe
...

Как понять игнорировались какие-то ключи или нет?
Может с ARCH ----> x86 (generic) чего-то не так?
Чего смотреть или исправлять?
Re[5]: вопрос о подключении библиотек ffmpeg к проекту в среде
От: sergey2b ЮАР  
Дата: 05.01.23 13:33
Оценка:
Здравствуйте, ProgrammerCPP, Вы писали:

PCP>Здравствуйте, sergey2b, Вы писали:


S>>компилятор в VS достаточно сильно отличаеться от gcc

S>>поэтому откомпилировать вы сможете только gcc

PCP>А причём тут линкер?

PCP>Несовместимость форматов выходных файлов — это всего лишь версия.
PCP>Её нужно как-то подтвердить или опровергнуть.

это факт
The two obvious ones are if the .a file is for a dynamic link library (.dll.a) then the format that GCC/binutils uses is different from what Microsoft uses.


PCP>Как понять игнорировались какие-то ключи или нет?

PCP>Может с ARCH ----> x86 (generic) чего-то не так?
PCP>Чего смотреть или исправлять?

найдите make файл где описанн ключь, там же описанны все доступные ключи
но вам точно нужны
--toolchain=msvc \
--arch=x86 \
Re: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
От: smeeld  
Дата: 05.01.23 18:46
Оценка:
Здравствуйте, ProgrammerCPP, Вы писали:

У тебя cpp проект или .c? Если да, то прописываешь ли ffmpeg-вски инклуды в блоке extern "C"?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.