The variables of the same name are merged together if compiled with -fcommon. It used to be the default. This default behaviour allows to declare a variable in a header file and share the variable in every .o binaries thanks to merge at link-time.
If compiling with -fno-common (default in GCC 10), the variable must be shared as extern to avoid multiple re-definitions. Fixes: dff22404aaad ("examples/vm_power_mgr: add VCPU to PCPU mapping") Cc: sta...@dpdk.org Signed-off-by: Thomas Monjalon <tho...@monjalon.net> --- examples/vm_power_manager/channel_manager.c | 2 ++ examples/vm_power_manager/channel_manager.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/vm_power_manager/channel_manager.c b/examples/vm_power_manager/channel_manager.c index 4ac21f02c1..4d13697208 100644 --- a/examples/vm_power_manager/channel_manager.c +++ b/examples/vm_power_manager/channel_manager.c @@ -35,6 +35,8 @@ #define RTE_LOGTYPE_CHANNEL_MANAGER RTE_LOGTYPE_USER1 +struct libvirt_vm_info lvm_info[MAX_CLIENTS]; + /* Global pointer to libvirt connection */ static virConnectPtr global_vir_conn_ptr; diff --git a/examples/vm_power_manager/channel_manager.h b/examples/vm_power_manager/channel_manager.h index 8284be0a18..a2a2f2bba0 100644 --- a/examples/vm_power_manager/channel_manager.h +++ b/examples/vm_power_manager/channel_manager.h @@ -41,7 +41,7 @@ struct libvirt_vm_info { uint8_t num_cpus; }; -struct libvirt_vm_info lvm_info[MAX_CLIENTS]; +extern struct libvirt_vm_info lvm_info[MAX_CLIENTS]; /* Communication Channel Status */ enum channel_status { CHANNEL_MGR_CHANNEL_DISCONNECTED = 0, CHANNEL_MGR_CHANNEL_CONNECTED, -- 2.26.2