Repository navigation
Description
Description
Certain extension targets in extensions/ call external library APIs guarded by HAVE_* macros, but do not declare the corresponding dependency in their meson.build target definition.
Because all extension modules set override_options : [ 'b_lundef=false' ], the linker produces the shared objects without warning at build time. However, the resulting shared libraries lack the corresponding DT_NEEDED entries, leading to unresolved symbol errors when dynamically loaded (dlopen) on platforms or configurations with strict dynamic linkers (such as Android Bionic) where undefined symbols in dlopened modules must be resolved from their own dependencies.
Details
1. cairo_io (extensions/cairo_io)
Under #if HAVE_LCMS2, cmsOpenProfileFromMem() from LittleCMS (<lcms2.h>) is called directly in:
extensions/cairo_io/cairo-image-surface-jpeg.c(line 215)extensions/cairo_io/cairo-image-surface-png.c(line 303)extensions/cairo_io/cairo-image-surface-avif.c(line 95)extensions/cairo_io/cairo-image-surface-jxl.c(line 267)
However, extensions/cairo_io/meson.build does not include use_lcms2 ? lcms2_dep : [] in dependencies : [...].
2. image_viewer (extensions/image_viewer)
- Under
#if HAVE_LIBWEBP,WebPInitDecoderConfig(),WebPGetFeatures(), andWebPFreeDecBuffer()from<webp/decode.h>are called inextensions/image_viewer/gth-metadata-provider-image.c(lines 178–188). - Under
#if HAVE_LIBJXL,JxlSignatureCheck(),JxlDecoderCreate(), and other JXL APIs from<jxl/decode.h>are called inextensions/image_viewer/gth-metadata-provider-image.c(lines 194–226).
However, extensions/image_viewer/meson.build only specifies dependencies : extension_common_deps and omits use_libwebp ? libwebp_dep : [] and use_libjxl ? libjxl_deps : [].
Suggested Fix
--- a/extensions/cairo_io/meson.build
+++ b/extensions/cairo_io/meson.build
@@ -37,6 +37,7 @@
dependencies : [
extension_common_deps,
jpeg_deps,
+ use_lcms2 ? lcms2_dep : [],
use_libtiff ? tiff_deps : [],
use_librsvg ? librsvg_dep : [],
use_libwebp ? libwebp_dep : [],
--- a/extensions/image_viewer/meson.build
+++ b/extensions/image_viewer/meson.build
@@ -14,7 +14,11 @@
image_viewer_mod = shared_library('image_viewer',
sources : [ source_files, gresource_files ],
- dependencies : extension_common_deps,
+ dependencies : [
+ extension_common_deps,
+ use_libwebp ? libwebp_dep : [],
+ use_libjxl ? libjxl_deps : []
+ ],
include_directories : [ config_inc, pix_inc ],
c_args : c_args,
link_with : jpeg_utils_mod,
Activity
DevGitPit commentedon Oct 31, 2026
For reference - termux/termux-packages#33005
Just fyi, please disregard the patch if it changes something deliberate.