Duplicate symbol errors when building with Meson 0.52.0
It seems that gnome-builder uses link_whole
too much. Meson 0.52.0 changes the behavior of link_whole
and now gnome-builder fails to link because of duplicate symbol errors. Please see https://github.com/mesonbuild/meson/pull/5936 for details of the change.
[372/1132] Linking target src/tests/test-compile-commands.
FAILED: src/tests/test-compile-commands
clang -B/home/lantw44/.local/bin -o src/tests/test-compile-commands 'src/tests/a4ccf2d@@test-compile-commands@exe/test-compile-commands.c.o' -L/home/lantw44/gnome/devinstall/lib -L/usr/local/lib -Wl,--as-needed -Wl,--no-undefined -Wl,--whole-archive -Wl,--start-group src/libide/foundry/libide-foundry-3.35.a src/libide/core/libide-core-3.35.a src/libide/io/libide-io-3.35.a src/libide/threading/libide-threading-3.35.a src/libide/projects/libide-projects-3.35.a src/libide/code/libide-code-3.35.a src/libide/plugins/libide-plugins-3.35.a src/libide/vcs/libide-vcs-3.35.a -Wl,--no-whole-archive -Wl,-z,relro -Wl,-z,now -march=corei7 -B/home/lantw44/.local/bin -pipe -g3 -Og -gz -fdebug-macro -B/home/lantw44/.local/bin -Wl,--compress-debug-sections=zlib -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libgio-2.0.so /home/lantw44/gnome/devinstall/lib/libgobject-2.0.so /home/lantw44/gnome/devinstall/lib/libglib-2.0.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libgtk-3.so /home/lantw44/gnome/devinstall/lib/libgdk-3.so /usr/lib/libz.so /home/lantw44/gnome/devinstall/lib/libpangocairo-1.0.so /home/lantw44/gnome/devinstall/lib/libpango-1.0.so /home/lantw44/gnome/devinstall/lib/libharfbuzz.so /home/lantw44/gnome/devinstall/lib/libatk-1.0.so /home/lantw44/gnome/devinstall/lib/libcairo-gobject.so /home/lantw44/gnome/devinstall/lib/libcairo.so /home/lantw44/gnome/devinstall/lib/libgdk_pixbuf-2.0.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libdazzle-1.0.so -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libpeas-1.0.so -Wl,--export-dynamic /home/lantw44/gnome/devinstall/lib/libgmodule-2.0.so -pthread /home/lantw44/gnome/devinstall/lib/libgirepository-1.0.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libvte-2.91.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libjson-glib-1.0.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libtemplate_glib-1.0.so -L/home/lantw44/gnome/devinstall/lib -lintl /usr/local/lib/libxml2.so -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libgtksourceview-4.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib/ -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,--end-group
ld: error: duplicate symbol: _ide_context_set_has_project
>>> defined at ide-context.c:859 (../../source/gnome-builder/src/libide/core/ide-context.c:859)
>>> ide-context.c.o:(_ide_context_set_has_project) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:859 (../../source/gnome-builder/src/libide/core/ide-context.c:859)
>>> ide-context.c.o:(.text+0xF00) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_build_file
>>> defined at ide-context.c:678 (../../source/gnome-builder/src/libide/core/ide-context.c:678)
>>> ide-context.c.o:(ide_context_build_file) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:678 (../../source/gnome-builder/src/libide/core/ide-context.c:678)
>>> ide-context.c.o:(.text+0x950) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_build_filename
>>> defined at ide-context.c:711 (../../source/gnome-builder/src/libide/core/ide-context.c:711)
>>> ide-context.c.o:(ide_context_build_filename) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:711 (../../source/gnome-builder/src/libide/core/ide-context.c:711)
>>> ide-context.c.o:(.text+0xA50) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_cache_file
>>> defined at ide-context.c:570 (../../source/gnome-builder/src/libide/core/ide-context.c:570)
>>> ide-context.c.o:(ide_context_cache_file) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:570 (../../source/gnome-builder/src/libide/core/ide-context.c:570)
>>> ide-context.c.o:(.text+0x5B0) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_cache_filename
>>> defined at ide-context.c:627 (../../source/gnome-builder/src/libide/core/ide-context.c:627)
>>> ide-context.c.o:(ide_context_cache_filename) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:627 (../../source/gnome-builder/src/libide/core/ide-context.c:627)
>>> ide-context.c.o:(.text+0x7B0) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_dup_project_id
>>> defined at ide-context.c:460 (../../source/gnome-builder/src/libide/core/ide-context.c:460)
>>> ide-context.c.o:(ide_context_dup_project_id) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:460 (../../source/gnome-builder/src/libide/core/ide-context.c:460)
>>> ide-context.c.o:(.text+0x280) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_dup_title
>>> defined at ide-context.c:780 (../../source/gnome-builder/src/libide/core/ide-context.c:780)
>>> ide-context.c.o:(ide_context_dup_title) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:780 (../../source/gnome-builder/src/libide/core/ide-context.c:780)
>>> ide-context.c.o:(.text+0xCE0) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_get_type
>>> defined at ide-context.c:68 (../../source/gnome-builder/src/libide/core/ide-context.c:68)
>>> ide-context.c.o:(ide_context_get_type) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:68 (../../source/gnome-builder/src/libide/core/ide-context.c:68)
>>> ide-context.c.o:(.text+0x0) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_has_project
>>> defined at ide-context.c:845 (../../source/gnome-builder/src/libide/core/ide-context.c:845)
>>> ide-context.c.o:(ide_context_has_project) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:845 (../../source/gnome-builder/src/libide/core/ide-context.c:845)
>>> ide-context.c.o:(.text+0xE90) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_log
>>> defined at ide-context.c:827 (../../source/gnome-builder/src/libide/core/ide-context.c:827)
>>> ide-context.c.o:(ide_context_log) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:827 (../../source/gnome-builder/src/libide/core/ide-context.c:827)
>>> ide-context.c.o:(.text+0xE20) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_new
>>> defined at ide-context.c:387 (../../source/gnome-builder/src/libide/core/ide-context.c:387)
>>> ide-context.c.o:(ide_context_new) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:387 (../../source/gnome-builder/src/libide/core/ide-context.c:387)
>>> ide-context.c.o:(.text+0x90) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_peek_child_typed
>>> defined at ide-context.c:432 (../../source/gnome-builder/src/libide/core/ide-context.c:432)
>>> ide-context.c.o:(ide_context_peek_child_typed) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:432 (../../source/gnome-builder/src/libide/core/ide-context.c:432)
>>> ide-context.c.o:(.text+0xB0) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_ref_project_settings
>>> defined at ide-context.c:758 (../../source/gnome-builder/src/libide/core/ide-context.c:758)
>>> ide-context.c.o:(ide_context_ref_project_settings) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:758 (../../source/gnome-builder/src/libide/core/ide-context.c:758)
>>> ide-context.c.o:(.text+0xC20) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_ref_workdir
>>> defined at ide-context.c:516 (../../source/gnome-builder/src/libide/core/ide-context.c:516)
>>> ide-context.c.o:(ide_context_ref_workdir) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:516 (../../source/gnome-builder/src/libide/core/ide-context.c:516)
>>> ide-context.c.o:(.text+0x400) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_set_project_id
>>> defined at ide-context.c:487 (../../source/gnome-builder/src/libide/core/ide-context.c:487)
>>> ide-context.c.o:(ide_context_set_project_id) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:487 (../../source/gnome-builder/src/libide/core/ide-context.c:487)
>>> ide-context.c.o:(.text+0x350) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_set_title
>>> defined at ide-context.c:806 (../../source/gnome-builder/src/libide/core/ide-context.c:806)
>>> ide-context.c.o:(ide_context_set_title) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:806 (../../source/gnome-builder/src/libide/core/ide-context.c:806)
>>> ide-context.c.o:(.text+0xD70) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_set_workdir
>>> defined at ide-context.c:545 (../../source/gnome-builder/src/libide/core/ide-context.c:545)
>>> ide-context.c.o:(ide_context_set_workdir) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context.c:545 (../../source/gnome-builder/src/libide/core/ide-context.c:545)
>>> ide-context.c.o:(.text+0x490) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_addin_get_type
>>> defined at ide-context-addin.c:27 (../../source/gnome-builder/src/libide/core/ide-context-addin.c:27)
>>> ide-context-addin.c.o:(ide_context_addin_get_type) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context-addin.c:27 (../../source/gnome-builder/src/libide/core/ide-context-addin.c:27)
>>> ide-context-addin.c.o:(.text+0x0) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_addin_load
>>> defined at ide-context-addin.c:159 (../../source/gnome-builder/src/libide/core/ide-context-addin.c:159)
>>> ide-context-addin.c.o:(ide_context_addin_load) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context-addin.c:159 (../../source/gnome-builder/src/libide/core/ide-context-addin.c:159)
>>> ide-context-addin.c.o:(.text+0x370) in archive src/libide/core/libide-core-3.35.a
ld: error: duplicate symbol: ide_context_addin_load_project_async
>>> defined at ide-context-addin.c:109 (../../source/gnome-builder/src/libide/core/ide-context-addin.c:109)
>>> ide-context-addin.c.o:(ide_context_addin_load_project_async) in archive src/libide/foundry/libide-foundry-3.35.a
>>> defined at ide-context-addin.c:109 (../../source/gnome-builder/src/libide/core/ide-context-addin.c:109)
>>> ide-context-addin.c.o:(.text+0x120) in archive src/libide/core/libide-core-3.35.a
ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[375/1132] Compiling C object 'src/tests/a4ccf2d@@test-completion-fuzzy@exe/test-completion-fuzzy.c.o'.
ninja: build stopped: subcommand failed.
In case you see ninja: fatal: posix_spawn: Argument list too long
, apply https://github.com/mesonbuild/meson/pull/6030 to fix it. Meson 0.52.0 generates a lot of duplicate arguments and it may exceed the length limit of the kernel.