Mike Gilbert writes: > On Thu, Sep 14, 2023 at 10:25 AM Arsen Arsenović wrote: >> Madhu writes: >> > systemd-udev cannot be built as a static binary again presumably a >> > carefully thought out design decision behind its design and >> > philosophy. >> >> Since static linking is seldom a good idea, it is more likely that >> simply nobody bothered. I don't recall any udev components in systemd >> v249 (which is the version I attempted to rebase eudev on top of) which >> can't be static linked. > > The main issue is symbol conflicts with several major projects. > > systemd makes careful use of ELF symbol visibility (hidden symbols) to > prevent conflicts when libudev or libsystemd are linked with other > projects. > > As I understand it, it is up to the linker to apply any visibility > rules. This doesn't work for static libs since the linker isn't > actually involved in their creation. A static library is really just > an archive with a bunch of unlinked ELF objects. > > Since the symbol visibility rules are not applied, attempting to link > against libudev.a or libsystemd.a leads to symbol conflicts in > packages like LVM2 and cryptsetup. There are some Gentoo bug reports > about this, but I can't find them immediately. > > The systemd project (upstream) has chosen not to work around these > conflicts by renaming symbols, and instead chooses not to support > static linking at all. They see static libs as being defective by > design. If the symbol visibility issue could be resolved at the > toolchain level, they would probably be more willing to support it. We can entertain the useless idea of static linking by trying partial linking. I can give that a shot later. Thanks for the background. Have a lovely day. -- Arsen Arsenović