Затем подключаю к своему проекту.
В результате получаю ошибки и предупреждения:
error LNK2019: ссылка на неразрешенный внешний символ avcodec_find_encoder в функции
libavcodec.lib : warning LNK4272: тип компьютера библиотеки "x86" конфликтует с типом целевого компьютера "x64"
Выше я указал ключи для configure, благодаря которым всё должно быть нормально.
Что пошло не так?
Посоветуйте, пожалуйста, универсальный алгоритм выхода из этой ситуации.
Меня интересует смысл, а не результат
Re: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
Здравствуйте, ProgrammerCPP, Вы писали:
PCP>Меня интересует смысл, а не результат
Смысл в том, что MSYS собирает библиотеки с помощью MinGW, а подключать вы их собрались в MSVC.
Бинарники от MinGW бинарно несовместимы с MSVC и банальной сменой расширения вы этой совместимости не достигните.
Re: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
Здравствуйте, 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, Вы писали:
W>Потому что MSYS`овский сборщик вполне мог это проигнорировать вообще.
Очень похоже на то, ибо там походу ещё и --arch=x86_64 проигнорировано
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[5]: вопрос о подключении библиотек ffmpeg к проекту в среде VS2022
Здравствуйте, 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.
Здравствуйте, wander, Вы писали:
CC>>а --toolchain=msvc тогда что означает?
W>Может и ничего. W>Потому что MSYS`овский сборщик вполне мог это проигнорировать вообще.
Здравствуйте, sergey2b, Вы писали:
S>если не секрет для чего вы хотите его собрать ?
Мне нужно разобраться с этим глюком. Может быть есть какие-то ключи,
которые заставят распечатать на экране всю нужную инфу: разрядность, тип библиотеки, платформу и совместимость с msvc.
Может есть какие-то утилиты, книги или статьи. Ну, хотя бы конкретное объяснение. Типа, в libe функция в такой кодировке, а должна быть
в такой-то.
Re[3]: вопрос о подключении библиотек ffmpeg к проекту в среде
Здравствуйте, ProgrammerCPP, Вы писали:
PCP>Может есть какие-то утилиты, книги или статьи. Ну, хотя бы конкретное объяснение. Типа, в libe функция в такой кодировке, а должна быть PCP>в такой-то.
компилятор в VS достаточно сильно отличаеться от gcc
поэтому откомпилировать вы сможете только gcc
Печатает:
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
Здравствуйте, 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