Как успешно собрать часть jctv c в libbpg на Linux с mingw-w64 для windows? - PullRequest
1 голос
/ 26 февраля 2020

Я знаю, что мне нужны zlib, libpng, libjpeg-turbo и yasm.

Я успешно собрал их и правильно установил (надеюсь, что так), потому что когда я пытаюсь "сделать" libbpg с помощью следующей конфигурации в Makefile:

# Enable compilation of Javascript decoder with Emscripten
#USE_EMCC=y
# Enable x265 for the encoder
USE_X265=y
# Enable the JCTVC code (best quality but slow) for the encoder
USE_JCTVC=y
# Compile bpgview (SDL and SDL_image libraries needed)
#USE_BPGVIEW=y
# Enable it to use bit depths > 12 (need more tests to validate encoder)
USE_JCTVC_HIGH_BIT_DEPTH=y
# Enable the cross compilation for Windows
CONFIG_WIN32=y
# Enable for compilation on MacOS X
#CONFIG_APPLE=y

Я не увидел какой-либо серьезной ошибки в выводе моего терминала при сборке кодировщика bpgde c .exe и H265.

Однако, когда дело доходит до jctv c, у меня было БОЛЬШОЕ сообщение об ошибке (большая часть почти повторяется)

......
x86_64-w64-mingw32-g++ -g -Wl,--gc-sections -o bpgenc.exe bpgenc.o x265_glue.o x265.out/8bit/libx265.a x265.out/10bit/libx265.a x265.out/12bit/libx265.a jctvc_glue.o jctvc/libjctvc.a  -lpng -ljpeg -lz
/usr/bin/x86_64-w64-mingw32-ld: jctvc/libjctvc.a(TAppEncCfg.o): in function `OptionBase':
(somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:81: undefined reference to `__gxx_personality_sj0'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:81: undefined reference to `_Unwind_SjLj_Register'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:82: undefined reference to `_Unwind_SjLj_Unregister'
/usr/bin/x86_64-w64-mingw32-ld: jctvc/libjctvc.a(TAppEncCfg.o):/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/include/c++/ext/new_allocator.h:86: undefined reference to `_Unwind_SjLj_Resume'
/usr/bin/x86_64-w64-mingw32-ld: jctvc/libjctvc.a(TAppEncCfg.o): in function `ParseFailure':
(somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:54: undefined reference to `__gxx_personality_sj0'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:54: undefined reference to `_Unwind_SjLj_Register'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:55: undefined reference to `_Unwind_SjLj_Unregister'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:55: undefined reference to `_Unwind_SjLj_Resume'
/usr/bin/x86_64-w64-mingw32-ld: jctvc/libjctvc.a(TAppEncCfg.o): in function `df::program_options_lite::Option<double>::parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
(somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:118: undefined reference to `__gxx_personality_sj0'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:118: undefined reference to `_Unwind_SjLj_Register'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:120: undefined reference to `_Unwind_SjLj_Unregister'
/usr/bin/x86_64-w64-mingw32-ld: (somewhere)/libbpg-0.9.8/jctvc/program_options_lite.h:120: undefined reference to `_Unwind_SjLj_Resume'
/usr/bin/x86_64-w64-mingw32-ld: jctvc/libjctvc.a(TAppEncCfg.o): in function `df::program_options_lite::Option<bool>::parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
......
collect2: error: ld returned 1 exit status
make: *** [Makefile:197:bpgenc.exe] errorcode 1

(Чтобы привести пример)

Я заметил, что Mingw-w64 на linux использует версию g cc с обработкой исключений dw2 вместо sjlj, что требуется для jctv c в соответствии с выводом выше.

Я пытался переместить libgcc_s_sjlj_1.dll в / usr / x86_64-w64-mingw32 / bin и / usr / x86_64-w64-mingw32 / lib, но это не работает.

Я знал, что g cc можно настроить для включения sjlj, но это означает, что я должен изменить mingw-w64, чего я не могу осмелиться.

МОЯ СРЕДА: Свежий инст alled debian 10, после "apt update && apt upgrade". Весь последний исходный код zlib, libjpeg-turbo, libpng, mingw-w64, libbpg.

Поэтому я хотел бы знать, если кто-нибудь знает, как правильно скомпилировать jctv c в libbpg. Большое спасибо.

...