Skip to content
This repository was archived by the owner on May 24, 2026. It is now read-only.

Commit 91b1d36

Browse files
committed
statically link msi-interop on Linux
Use static glib/gio/gobject/libxml/zlib for libmsi-interop.so on Linux (matching the existing approach for Windows/macOS) so the shared library has no runtime system library dependencies when loaded via P/Invoke from C#.
1 parent 6986e63 commit 91b1d36

1 file changed

Lines changed: 11 additions & 6 deletions

File tree

meson.build

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -440,12 +440,17 @@ msi_interop_sources = [
440440

441441
msi_interop_inc = include_directories('msi-interop')
442442

443+
msi_interop_deps = [glib, gio, gobject, libxml, zlib]
444+
msi_interop_link_with = []
445+
msi_interop_link_args = libmsi_shared_link_args
446+
443447
if host_machine.system() == 'linux'
444-
msi_interop_deps = libmsi_shared_deps
445-
msi_interop_link_with = []
446-
else
447-
msi_interop_deps = [glib, gio, gobject, libxml, zlib]
448-
msi_interop_link_with = []
448+
# Statically embed all dependencies into libmsi-interop.so so it has no
449+
# runtime system library dependencies (other than libc) when loaded via
450+
# P/Invoke from C#. This requires PIC-compiled static libs.
451+
msi_interop_link_args += [
452+
'-Wl,--exclude-libs,ALL',
453+
]
449454
endif
450455

451456
msi_interop_shared = shared_library('msi-interop',
@@ -455,7 +460,7 @@ msi_interop_shared = shared_library('msi-interop',
455460
include_directories: [inc_dirs, gsf_inc_dirs, gcab_inc_dirs, msi_interop_inc],
456461
dependencies: msi_interop_deps,
457462
link_with: msi_interop_link_with,
458-
link_args: libmsi_shared_link_args,
463+
link_args: msi_interop_link_args,
459464
gnu_symbol_visibility: 'hidden',
460465
)
461466

0 commit comments

Comments
 (0)