diff --git a/Makefile.am b/Makefile.am index 659dc054f1..af327de094 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2656,6 +2656,12 @@ $(src_core_libNetworkManagerTest_la_OBJECTS): $(src_libnm_core_public_mkenums_h) ############################################################################### +# NetworkManager binary also must contain symbols that are not used by the binary +# itself, but by the plugins (that are dlopened). We need to explicitly include +# them during linking. +networkmanager_undefined_symbols = \ + $(NULL) + noinst_PROGRAMS += src/core/NetworkManager-all-sym src_core_NetworkManager_all_sym_CPPFLAGS = $(src_core_cppflags) @@ -2670,6 +2676,7 @@ src_core_NetworkManager_all_sym_LDADD = \ src_core_NetworkManager_all_sym_LDFLAGS = \ -rdynamic \ + $(networkmanager_undefined_symbols:%=-u %) \ $(SANITIZER_EXEC_LDFLAGS) \ $(NULL) @@ -2696,6 +2703,7 @@ src_core_NetworkManager_LDADD = \ src_core_NetworkManager_LDFLAGS = \ -rdynamic \ -Wl,--version-script="src/core/NetworkManager.ver" \ + $(networkmanager_undefined_symbols:%=-u %) \ $(SANITIZER_EXEC_LDFLAGS) \ $(NULL) diff --git a/src/core/meson.build b/src/core/meson.build index f4d7af6407..1ce641d6d8 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -270,6 +270,14 @@ endif subdir('devices') subdir('settings/plugins') +# NetworkManager binary also must contain symbols that are not used by the binary +# itself, but by the plugins (that are dlopened). We need to explicitly include +# them during linking. +networkmanager_undefined_symbols_args = [] +foreach s: [] + networkmanager_undefined_symbols_args += ['-u', s] +endforeach + # NetworkManager binary # libNetworkManager.a, as built by meson doesn't contain all symbols @@ -284,7 +292,9 @@ NetworkManager_all_sym = executable( nm_deps, libudev_dep, ], - link_args: '-Wl,--no-gc-sections', + link_args: [ + '-Wl,--no-gc-sections', + ] + networkmanager_undefined_symbols_args, link_whole: [ libNetworkManager, libNetworkManagerBase, @@ -345,7 +355,7 @@ NetworkManager = executable( link_args: [ '-rdynamic', '-Wl,--version-script,@0@'.format(ver_script.full_path()), - ], + ] + networkmanager_undefined_symbols_args, link_depends: ver_script, install: true, install_dir: nm_sbindir,