HI,
after some research I found the problem. The libraries in the
e3-adaravis wrapper Makefile are added to the
USR_LDFLAGS variable, which results in a wrong ordering of the
variables on the commandline for the linker.
The glibb, usb and aravis libraries are placed before the
objects of ADAravis. So the linker does not search them for
the
missing symbols.
If one adds the libraries to USR_LIBS, the problem seems to be
solved. Note one can not use the pkg-config command here,
as EPICS adds "-l" to each component of the USR_LIBS string.
By the way, has this effect been observed before?
Regards,
Jörn
Am Montag, 18. August 2025, 14:42:43 Mitteleuropäische
Sommerzeit schrieb Jörn Dreyer via Tech-talk:
> Hi,
>
> some time ago I build EPICS using E3 on my OpenSuSE
Tumbleweed system when it still used GCC 14. As time
progresses gcc 15 became the default compiler on Tubleweed.
> Unfortunately this one fails to build EPICS currently. So
I decided to move my development into an container using
Debian 13 as the OS using gcc 14.2.
> I got the complete EPICS installed together with the
ADCore, ADGenICam and ADAravis modules that I need to read
some Basler cameras.
> But when I started my IOC script if fails during loading
of the libADAravis with an undefined symbol error
(g_direct_hash). This should be defined in libglib.so.
>
> So I took a closer look at the library using ldd:
>
> Building libADArvis.so using e3-build-tools results in:
> e3-adaravis/ADAravis/O.7.0.8.1_linux-x86_64$ ldd
libadaravis.so
> linux-vdso.so.1 (0x00007f5eedba8000)
> libstdc++.so.6 =>
/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5eed800000)
> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
(0x00007f5eed710000)
> libgcc_s.so.1 =>
/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5eedaa8000)
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007f5eed51a000)
> /lib64/ld-linux-x86-64.so.2 (0x00007f5eedbaa000)
>
> And compared that to the library I build on my Tumbleweed
system using E3:
> adaravis/2.3.0+2/lib/linux-x86_64 $ldd libadaravis.so
> linux-vdso.so.1 (0x00007f41e1c85000)
> libgio-2.0.so.0 => /lib64/libgio-2.0.so.0
(0x00007f41e199d000)
> libgobject-2.0.so.0 =>
/lib64/libgobject-2.0.so.0 (0x00007f41e193b000)
> libglib-2.0.so.0 => /lib64/libglib-2.0.so.0
(0x00007f41e17e4000)
> libusb-1.0.so.0 => /lib64/libusb-1.0.so.0
(0x00007f41e17c2000)
> libstdc++.so.6 => /lib64/libstdc++.so.6
(0x00007f41e1400000)
> libm.so.6 => /lib64/libm.so.6
(0x00007f41e16cd000)
> libgcc_s.so.1 => /lib64/libgcc_s.so.1
(0x00007f41e16a0000)
> libc.so.6 => /lib64/libc.so.6
(0x00007f41e1000000)
> libgmodule-2.0.so.0 =>
/lib64/libgmodule-2.0.so.0 (0x00007f41e1699000)
> libz.so.1 =>
/lib64/glibc-hwcaps/x86-64-v3/libz.so.1.3.1
(0x00007f41e167d000)
> libmount.so.1 => /lib64/libmount.so.1
(0x00007f41e13a9000)
> libselinux.so.1 => /lib64/libselinux.so.1
(0x00007f41e1377000)
> libffi.so.8 => /lib64/libffi.so.8
(0x00007f41e1672000)
> libpcre2-8.so.0 => /lib64/libpcre2-8.so.0
(0x00007f41e12bb000)
> libudev.so.1 => /lib64/libudev.so.1
(0x00007f41e1276000)
> /lib64/ld-linux-x86-64.so.2 (0x00007f41e1c87000)
> libblkid.so.1 => /lib64/libblkid.so.1
(0x00007f41e1239000)
> libcap.so.2 => /lib64/libcap.so.2
(0x00007f41e122d000)
> libeconf.so.0 => /lib64/libeconf.so.0
(0x00007f41e121f000)
>
>
> For a crosscheck, I compiled the same under Ubuntu 22.04
using gcc 11.4:
>
> Using e3 resulted in:
> adaravis/2.3.0+2/lib/linux-x86_64$ ldd libadaravis.so
> linux-vdso.so.1 (0x00007ffe18474000)
> libstdc++.so.6 =>
/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f32bf652000)
> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
(0x00007f32bf56b000)
> libgcc_s.so.1 =>
/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f32bf54b000)
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007f32bf322000)
> /lib64/ld-linux-x86-64.so.2 (0x00007f32bf955000)
>
> And for the EPICS build system:
> ADAravis/lib/linux-x86_64$ ldd libADAravis.so
> linux-vdso.so.1 (0x00007ffca4d91000)
> libADGenICam.so =>
/XXX/modules/src/areaDetector/ADGenICam/lib/linux-x86_64/libADGenICam.so
(0x00007fd29dc5a000)
> libaravis-0.8.so.0 =>
/lib/x86_64-linux-gnu/libaravis-0.8.so.0 (0x00007fd29dbba000)
> libgobject-2.0.so.0 =>
/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007fd29db5a000)
> libglib-2.0.so.0 =>
/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fd29da20000)
> libstdc++.so.6 =>
/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd29d7f4000)
> libgcc_s.so.1 =>
/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd29d7d2000)
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007fd29d5a9000)
> libADBase.so =>
/XXX/modules/src/areaDetector/ADCore/lib/linux-x86_64/libADBase.so
(0x00007fd29d56e000)
> libasyn.so =>
/XXX/modules/src/asyn/lib/linux-x86_64/libasyn.so
(0x00007fd29d4c7000)
> libnanohttp_stream.so =>
/XXX/modules/src/areaDetector/ADSupport/lib/linux-x86_64/libnanohttp_stream.so
(0x00007fd29d33d000)
> libCom.so.3.18.0 =>
/XXX/base-7.0.4/lib/linux-x86_64/libCom.so.3.18.0
(0x00007fd29d2c0000)
> libgio-2.0.so.0 =>
/lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007fd29d0e6000)
> libxml2.so.2 =>
/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007fd29cf04000)
> libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1
(0x00007fd29cee8000)
> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
(0x00007fd29ce01000)
> libusb-1.0.so.0 =>
/lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007fd29cde1000)
> libffi.so.8 =>
/lib/x86_64-linux-gnu/libffi.so.8 (0x00007fd29cdd4000)
> libpcre.so.3 =>
/lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fd29cd5e000)
> /lib64/ld-linux-x86-64.so.2 (0x00007fd29dc84000)
> libdbCore.so.3.18.0 =>
/XXX/base-7.0.4/lib/linux-x86_64/libdbCore.so.3.18.0
(0x00007fd29ccc7000)
> libca.so.4.13.6 =>
/XXX/base-7.0.4/lib/linux-x86_64/libca.so.4.13.6
(0x00007fd29cc5d000)
> libxml2.so =>
/XXX/modules/src/areaDetector/ADSupport/lib/linux-x86_64/libxml2.so
(0x00007fd29cad7000)
> libtirpc.so.3 =>
/lib/x86_64-linux-gnu/libtirpc.so.3 (0x00007fd29caa9000)
> libzlib.so =>
/XXX/modules/src/areaDetector/ADSupport/lib/linux-x86_64/libzlib.so
(0x00007fd29ca8f000)
> libreadline.so.8 =>
/lib/x86_64-linux-gnu/libreadline.so.8 (0x00007fd29ca3b000)
> libgmodule-2.0.so.0 =>
/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007fd29ca34000)
> libmount.so.1 =>
/lib/x86_64-linux-gnu/libmount.so.1 (0x00007fd29c9ee000)
> libselinux.so.1 =>
/lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fd29c9c2000)
> libicuuc.so.70 =>
/lib/x86_64-linux-gnu/libicuuc.so.70 (0x00007fd29c7c7000)
> liblzma.so.5 =>
/lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fd29c79c000)
> libudev.so.1 =>
/lib/x86_64-linux-gnu/libudev.so.1 (0x00007fd29c772000)
> libgssapi_krb5.so.2 =>
/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fd29c71c000)
> libtinfo.so.6 =>
/lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007fd29c6ea000)
> libblkid.so.1 =>
/lib/x86_64-linux-gnu/libblkid.so.1 (0x00007fd29c6b3000)
> libpcre2-8.so.0 =>
/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007fd29c61c000)
> libicudata.so.70 =>
/lib/x86_64-linux-gnu/libicudata.so.70 (0x00007fd29a9fe000)
> libkrb5.so.3 =>
/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fd29a931000)
> libk5crypto.so.3 =>
/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fd29a902000)
> libcom_err.so.2 =>
/lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fd29a8fc000)
> libkrb5support.so.0 =>
/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fd29a8ee000)
> libkeyutils.so.1 =>
/lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fd29a8e7000)
> libresolv.so.2 =>
/lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fd29a8d3000)
>
> I checked that e3 puts all the libraries (aravis, glib,
gobject, gmodule, usb) on the commandline when linking the
library.
> So to my surprise they are not referenced in the shared
library under Debian when using e3 but when building with the
EPICS build system.
> But why do they show up on Tumbleweed then?
> Any advice how to get that working is appreciated.
>
> Regards
>
> Jörn Dreyer
>
>
>
>
--
Dr. Jörn Dreyer
HIBEF DAQ + Controls
Institut für Strahlenpysik
Helmholtz-Zentrum Dresden - Rossendorf e.V. (HZDR)
Bautzner Landstr. 400 | 01328 Dresden | Germany
https://gcc02.safelinks.protection.outlook.com/?url="">
Vorstand: Prof. Dr. Sebastian M. Schmidt, Dr. Diana Stiller
Vereinsregister: VR 1693 beim Amtsgericht Dresden