Re: Bug#1110520: jpeg-xl: FTBFS on riscv64: undefined reference to `__cxa_call_terminate'

Aurelien Jarno <[email protected]>
Newsgroups gmane.linux.debian.ports.s390
Message-ID <[email protected]>
tag 1110520 + patch
retitle 1110520 jpeg-xl: FTBFS on architectures using gcc-13: undefined reference to `__cxa_call_terminate'
user [email protected]
usertags 1110520 s390x
thanks

On 2025-08-07 14:37, Luke Yasuda wrote:
> Source: jpeg-xl
> Version: 0.11.1-4
> Severity: serious
> Tags: ftbfs
> Justification: fails to build from source (but built successfully in the past)
> X-Debbugs-Cc: [email protected]
> User: [email protected]
> Usertags: riscv64
> 
> Hi!

Hi,

> jpeg-xl FTBFS on riscv64, the version in sid and trixie:
> 
> 
> [333/418] : && /usr/bin/g++-13 -g -O2 -ffile-prefix-map=/build/reproducible-path/jpeg-xl-0.11.1=. -fstack-protector-strong -Wformat -Werror=format-security -fexcess-precision=fast -DJXL_DEBUG_WARNING -DJXL_DEBUG_ON_ERROR -Wdate-time -D_FORTIFY_SOURCE=2 -fno-rtti -Wl,-z,relro -Wl,-z,now      -fPIE -pie -Wl,--dependency-file=lib/CMakeFiles/codec_test.dir/link.d lib/CMakeFiles/codec_test.dir/extras/codec_test.cc.o -o lib/tests/codec_test  -Wl,-rpath,/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib  lib/libjxl_testlib-internal.a  lib/libjxl_extras-internal.a  /usr/lib/riscv64-linux-gnu/libgtest_main.a  /usr/lib/riscv64-linux-gnu/libgtest.a  lib/libjxl-internal.a  /usr/lib/riscv64-linux-gnu/libhwy.so  /usr/lib/riscv64-linux-gnu/libbrotlidec.so  /usr/lib/riscv64-linux-gnu/libbrotlicommon.so  /usr/lib/riscv64-linux-gnu/libbrotlienc.so  lib/libjxl_cms.so.0.11.1  /usr/lib/riscv64-linux-gnu/libtcmalloc_minimal.so  lib/libjxl_threads.so.0.11.1  /usr/lib/riscv64-linux-gnu/libgif.so  /usr/lib/riscv64-linux-gnu/libjpeg.so  /usr/lib/riscv64-linux-gnu/libpng.so  /usr/lib/riscv64-linux-gnu/libz.so  /usr/lib/riscv64-linux-gnu/libOpenEXR-3_1.so  /usr/lib/riscv64-linux-gnu/libOpenEXRUtil-3_1.so  /usr/lib/riscv64-linux-gnu/libOpenEXRCore-3_1.so  /usr/lib/riscv64-linux-gnu/libIex-3_1.so  /usr/lib/riscv64-linux-gnu/libIlmThread-3_1.so  /usr/lib/riscv64-linux-gnu/libImath-3_1.so && cd /build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib && /usr/bin/cmake -D TEST_TARGET=codec_test -D TEST_EXECUTABLE=/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib/tests/codec_test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_FILTER= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=codec_test_TESTS -D CTEST_FILE=/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib/codec_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=240 -D TEST_DISCOVERY_EXTRA_ARGS= -D TEST_XML_OUTPUT_DIR= -P /usr/share/cmake-3.31/Modules/GoogleTestAddTests.cmake
> FAILED: lib/tests/codec_test lib/codec_test[1]_tests.cmake /build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib/codec_test[1]_tests.cmake 
> : && /usr/bin/g++-13 -g -O2 -ffile-prefix-map=/build/reproducible-path/jpeg-xl-0.11.1=. -fstack-protector-strong -Wformat -Werror=format-security -fexcess-precision=fast -DJXL_DEBUG_WARNING -DJXL_DEBUG_ON_ERROR -Wdate-time -D_FORTIFY_SOURCE=2 -fno-rtti -Wl,-z,relro -Wl,-z,now      -fPIE -pie -Wl,--dependency-file=lib/CMakeFiles/codec_test.dir/link.d lib/CMakeFiles/codec_test.dir/extras/codec_test.cc.o -o lib/tests/codec_test  -Wl,-rpath,/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib  lib/libjxl_testlib-internal.a  lib/libjxl_extras-internal.a  /usr/lib/riscv64-linux-gnu/libgtest_main.a  /usr/lib/riscv64-linux-gnu/libgtest.a  lib/libjxl-internal.a  /usr/lib/riscv64-linux-gnu/libhwy.so  /usr/lib/riscv64-linux-gnu/libbrotlidec.so  /usr/lib/riscv64-linux-gnu/libbrotlicommon.so  /usr/lib/riscv64-linux-gnu/libbrotlienc.so  lib/libjxl_cms.so.0.11.1  /usr/lib/riscv64-linux-gnu/libtcmalloc_minimal.so  lib/libjxl_threads.so.0.11.1  /usr/lib/riscv64-linux-gnu/libgif.so  /usr/lib/riscv64-linux-gnu/libjpeg.so  /usr/lib/riscv64-linux-gnu/libpng.so  /usr/lib/riscv64-linux-gnu/libz.so  /usr/lib/riscv64-linux-gnu/libOpenEXR-3_1.so  /usr/lib/riscv64-linux-gnu/libOpenEXRUtil-3_1.so  /usr/lib/riscv64-linux-gnu/libOpenEXRCore-3_1.so  /usr/lib/riscv64-linux-gnu/libIex-3_1.so  /usr/lib/riscv64-linux-gnu/libIlmThread-3_1.so  /usr/lib/riscv64-linux-gnu/libImath-3_1.so && cd /build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib && /usr/bin/cmake -D TEST_TARGET=codec_test -D TEST_EXECUTABLE=/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib/tests/codec_test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_FILTER= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=codec_test_TESTS -D CTEST_FILE=/build/reproducible-path/jpeg-xl-0.11.1/obj-riscv64-linux-gnu/lib/codec_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=240 -D TEST_DISCOVERY_EXTRA_ARGS= -D TEST_XML_OUTPUT_DIR= -P /usr/share/cmake-3.31/Modules/GoogleTestAddTests.cmake
> /usr/bin/ld: /usr/lib/riscv64-linux-gnu/libgtest.a(gtest-all.cc.o): in function `testing::internal::XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(char const*)':
> (.text+0xb0e6): undefined reference to `__cxa_call_terminate'
> /usr/bin/ld: /usr/lib/riscv64-linux-gnu/libgtest.a(gtest-all.cc.o): in function `testing::internal::OpenFileForWriting(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
> (.text+0xb1c6): undefined reference to `__cxa_call_terminate'
> /usr/bin/ld: (.text+0xb28e): undefined reference to `__cxa_call_terminate'
> /usr/bin/ld: /usr/lib/riscv64-linux-gnu/libgtest.a(gtest-all.cc.o): in function `testing::internal::JsonUnitTestResultPrinter::JsonUnitTestResultPrinter(char const*)':
> (.text+0xb356): undefined reference to `__cxa_call_terminate'
> /usr/bin/ld: (.text+0xb41c): undefined reference to `__cxa_call_terminate'
> /usr/bin/ld: /usr/lib/riscv64-linux-gnu/libgtest.a(gtest-all.cc.o):(.text+0xb4e2): more undefined references to `__cxa_call_terminate' follow
> /usr/bin/ld: /usr/lib/riscv64-linux-gnu/libIlmThread-3_1.so: undefined reference to `__cxa_call_terminate@CXXABI_1.3.15'
> collect2: error: ld returned 1 exit status

The problem seems to happens because jpeg-xl is built with gcc-13 on 
riscv64. It is also reproducible on s390x. It's not clear to me why, as 
the packages providing libgtest.a or libIlmThread-3_1.so haven't been 
rebuilt since the last build of jpeg-xl on riscv64.

Nevertheless I have tested that jpeg-xl builds fine on riscv64 with 
gcc-14 (not clear why it has been changed to gcc-13 on riscv64), so the 
easiest fix is to build it with it. Here is the patch I tested:

--- jpeg-xl-0.11.1/debian/control
+++ jpeg-xl-0.11.1/debian/control
@@ -4,7 +4,7 @@
 Section: graphics
 Priority: optional
 Standards-Version: 4.7.0
-Build-Depends: asciidoc-base, gcc-13 [hppa powerpc ppc64 riscv64 sparc64 s390x], g++-13 [hppa powerpc ppc64 riscv64 sparc64 s390x],
+Build-Depends: asciidoc-base, gcc-13 [hppa powerpc ppc64 sparc64 s390x], g++-13 [hppa powerpc ppc64 sparc64 s390x],
                cmake (>= 3.10),
                debhelper-compat (= 13),
                default-jdk [amd64 arm64 armel armhf i386 mips64el ppc64el riscv64 s390x alpha ia64 m68k powerpc ppc64 sh4 sparc64 x32] <!nojava>,
--- jpeg-xl-0.11.1/debian/rules
+++ jpeg-xl-0.11.1/debian/rules
@@ -2,7 +2,7 @@
 
 include /usr/share/dpkg/default.mk
 
-GCC_13_ARCHS=hppa powerpc ppc64 riscv64 sparc64 s390x
+GCC_13_ARCHS=hppa powerpc ppc64 sparc64 s390x
 ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),$(GCC_13_ARCHS)))
   export CC=gcc-13
   export CXX=g++-13


Unfortunately this strategy doesn't work for s390x, as it causes the 
testsuite to fail.

Regards
Aurelien

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
[email protected]                     http://aurel32.net
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.