The wild linker rejects duplicate symbols even from archive members. When qemu-storage-daemon links both libqmp (with monitor/monitor.c) and libqemuutil (with stubs/monitor-core.c), all symbols from the stub .o are pulled in, causing duplicates for monitor_cur, monitor_set_cur, and qapi_event_emit.
Split each stub group into its own file so the linker only pulls in archive members whose symbols are actually needed. Signed-off-by: Marc-André Lureau <[email protected]> --- stubs/meson.build | 2 ++ stubs/monitor-core.c | 16 ---------------- stubs/monitor-cur.c | 14 ++++++++++++++ stubs/qapi-event-emit.c | 8 ++++++++ 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/stubs/meson.build b/stubs/meson.build index 93df8ea94f57..29b6644b2549 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -7,7 +7,9 @@ stub_ss.add(files('fdset.c')) stub_ss.add(files('iothread-lock.c')) stub_ss.add(files('is-daemonized.c')) stub_ss.add(files('monitor-core.c')) +stub_ss.add(files('monitor-cur.c')) stub_ss.add(files('monitor-hmp.c')) +stub_ss.add(files('qapi-event-emit.c')) stub_ss.add(files('replay-mode.c')) stub_ss.add(files('trace-control.c')) diff --git a/stubs/monitor-core.c b/stubs/monitor-core.c index 094b80721003..0e74d78d52e4 100644 --- a/stubs/monitor-core.c +++ b/stubs/monitor-core.c @@ -1,21 +1,5 @@ #include "qemu/osdep.h" -#include "monitor/monitor.h" #include "monitor/hmp.h" -#include "qapi/qapi-emit-events.h" - -Monitor *monitor_cur(void) -{ - return NULL; -} - -Monitor *monitor_set_cur(Coroutine *co, Monitor *mon) -{ - return NULL; -} - -void qapi_event_emit(QAPIEvent event, QDict *qdict) -{ -} int monitor_hmp_vprintf(MonitorHMP *mon, const char *fmt, va_list ap) { diff --git a/stubs/monitor-cur.c b/stubs/monitor-cur.c new file mode 100644 index 000000000000..93966a16b855 --- /dev/null +++ b/stubs/monitor-cur.c @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "qemu/osdep.h" +#include "monitor/monitor.h" + +Monitor *monitor_cur(void) +{ + return NULL; +} + +Monitor *monitor_set_cur(Coroutine *co, Monitor *mon) +{ + return NULL; +} diff --git a/stubs/qapi-event-emit.c b/stubs/qapi-event-emit.c new file mode 100644 index 000000000000..70b2719d714b --- /dev/null +++ b/stubs/qapi-event-emit.c @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "qemu/osdep.h" +#include "qapi/qapi-emit-events.h" + +void qapi_event_emit(QAPIEvent event, QDict *qdict) +{ +} -- 2.55.0.543.g5ebe2ebe4ea8
