Search code examples
static-linkingdpdkmeson-build

Fail to statically link against dpdk using meson dependency() directive


I'm trying to use meson to build dpdk's helloworld example as a standalone application. I want the application to be linked statically against dpdk libraries.

I've downloaded dpdk 22.07 to /home/aizrailev/dpdk and installed it to /home/aizrailev/dpdk/install (if dpdk is installed system-wide, everything works fine). Then I go to /home/aizrailev/dpdk/examples/helloworld and try to use the following meson.build to build the app (before that, I run export PKG_CONFIG_PATH=/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/pkgconfig):

project('dpdk-app', 'c')                                                                                                                                                                      
                                                                                                                                                                                              
dpdk = dependency('libdpdk', static: true)                                                                                                                                                    
sources = files('main.c')                                                                                                                                                                     
executable('dpdk-app', sources, dependencies: dpdk) 

Steps to build the app:

meson build
cd build/
ninja

The following error occurs:

[2/2] Linking target dpdk-app
FAILED: dpdk-app 
cc  -o dpdk-app dpdk-app.p/main.c.o -Wl,--as-needed -Wl,--no-undefined -Wl,--whole-archive
-Wl,--start-group /home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_cpt.a
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_dpaax.a
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_iavf.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_octeontx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bus_auxiliary.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bus_dpaa.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bus_fslmc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bus_ifpga.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bus_pci.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bus_vdev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bus_vmbus.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_cnxk.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_mlx5.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_qat.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_common_sfc_efx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool_bucket.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool_cnxk.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool_dpaa.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool_dpaa2.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool_octeontx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool_ring.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool_stack.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dma_cnxk.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dma_dpaa.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dma_dpaa2.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dma_hisilicon.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dma_idxd.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dma_ioat.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dma_skeleton.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_af_packet.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_ark.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_atlantic.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_avp.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_axgbe.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_bnx2x.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_bnxt.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_bond.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_cnxk.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_cxgbe.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_dpaa.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_dpaa2.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_e1000.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_ena.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_enetc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_enetfec.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_enic.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_failsafe.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_fm10k.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_hinic.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_hns3.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_i40e.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_iavf.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_ice.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_igc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_ionic.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_ixgbe.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_kni.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_liquidio.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_memif.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_mlx4.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_mlx5.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_netvsc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_nfp.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_ngbe.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_null.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_octeontx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_octeontx_ep.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_pcap.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_pfe.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_qede.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_ring.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_sfc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_softnic.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_tap.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_thunderx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_txgbe.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_vdev_netvsc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_vhost.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_virtio.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net_vmxnet3.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_raw_cnxk_bphy.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_raw_cnxk_gpio.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_raw_dpaa2_cmdif.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_raw_ntb.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_raw_skeleton.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_bcmfs.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_caam_jr.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_ccp.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_cnxk.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_dpaa_sec.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_dpaa2_sec.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_mlx5.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_nitrox.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_null.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_octeontx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_openssl.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_scheduler.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_crypto_virtio.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_compress_mlx5.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_compress_octeontx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_compress_zlib.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_regex_mlx5.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_regex_cn9k.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_vdpa_ifc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_vdpa_mlx5.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_vdpa_sfc.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_cnxk.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_dlb2.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_dpaa.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_dpaa2.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_dsw.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_opdl.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_skeleton.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_sw.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_event_octeontx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_baseband_acc100.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_baseband_fpga_5gnr_fec.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_baseband_fpga_lte_fec.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_baseband_la12xx.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_baseband_null.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_baseband_turbo_sw.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_node.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_graph.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_flow_classify.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_pipeline.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_table.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_pdump.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_port.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_fib.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_ipsec.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_vhost.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_stack.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_security.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_sched.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_reorder.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_rib.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_dmadev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_regexdev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_rawdev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_power.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_pcapng.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_member.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_lpm.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_latencystats.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_kni.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_jobstats.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_ip_frag.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_gso.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_gro.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_gpudev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_eventdev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_efd.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_distributor.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_cryptodev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_compressdev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_cfgfile.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bpf.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bitratestats.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bbdev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_acl.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_timer.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_hash.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_metrics.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_cmdline.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_pci.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_ethdev.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_meter.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_net.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mbuf.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_mempool.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_rcu.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_ring.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_eal.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_telemetry.a 
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_kvargs.a -Wl,--no-whole-archive
-Wl,--export-dynamic /usr/lib/gcc/x86_64-linux-gnu/11/libatomic.a
/usr/lib/x86_64-linux-gnu/libmlx5.a /usr/lib/x86_64-linux-gnu/libcrypto.a -ldl -pthread
/usr/lib/x86_64-linux-gnu/libz.a /usr/lib/x86_64-linux-gnu/libmlx4.a
/usr/lib/x86_64-linux-gnu/libibverbs.a /usr/lib/x86_64-linux-gnu/libbnxt_re-rdmav34.a
/usr/lib/x86_64-linux-gnu/libcxgb4-rdmav34.a /usr/lib/x86_64-linux-gnu/libefa.a
/usr/lib/x86_64-linux-gnu/libhns-rdmav34.a /usr/lib/x86_64-linux-gnu/libirdma-rdmav34.a
/usr/lib/x86_64-linux-gnu/libmthca-rdmav34.a /usr/lib/x86_64-linux-gnu/libocrdma-rdmav34.a
/usr/lib/x86_64-linux-gnu/libqedr-rdmav34.a /usr/lib/x86_64-linux-gnu/libvmw_pvrdma-rdmav34.a
/usr/lib/x86_64-linux-gnu/libhfi1verbs-rdmav34.a /usr/lib/x86_64-linux-gnu/libipathverbs-rdmav34.a 
/usr/lib/x86_64-linux-gnu/librxe-rdmav34.a /usr/lib/x86_64-linux-gnu/libsiw-rdmav34.a
/usr/lib/x86_64-linux-gnu/libnl-route-3.a /usr/lib/x86_64-linux-gnu/libnl-3.a
/usr/lib/x86_64-linux-gnu/libpcap.a /usr/lib/x86_64-linux-gnu/libdbus-1.a
/usr/lib/x86_64-linux-gnu/libjansson.a -Wl,--as-needed -lm /usr/lib/x86_64-linux-gnu/libnuma.a
-Wl,--end-group
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libpcap.a(bpf_filter.o): in function `bpf_validate':
(.text+0x680): multiple definition of `bpf_validate';
/home/aizrailev/dpdk/install/lib/x86_64-linux-gnu/librte_bpf.a(bpf_bpf_validate.c.o):bpf_validate.c:(.text+0x22c0): first defined here
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libdbus-1.a(libdbus_1_la-dbus-sysdeps-unix.o): in function `_dbus_listen_systemd_sockets':
(.text+0x200e): undefined reference to `sd_listen_fds'
/usr/bin/ld: (.text+0x204f): undefined reference to `sd_is_socket'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

However, if I use another meson.build that explicitly calls pkg-config to obtain the flags, then everything is fine:

project('dpdk-app', 'c')

pkgconfig = find_program('pkg-config')
cflags_cmd = run_command(pkgconfig, '--cflags', 'libdpdk', check: true)
ldflags_cmd = run_command(pkgconfig, '--static', '--libs', 'libdpdk', check: true)

cflags = cflags_cmd.stdout().split()
ldflags = ldflags_cmd.stdout().split()

sources = files('main.c')
executable('dpdk-app', sources, c_args: cflags, link_args: ldflags)

So, the native way for meson to use dependencies leads to an error. Am I missing something? I don't think that invoking pkg-config the way I did in the second meson.build is a good way of doing what I want, but I can't find another options.


Solution

  • based on the comments the issue is described as meson fails to statically build the dpdk application. But exploring the issue locally does not produce the error with the below meson build file as

    project('dpdk-app', 'c')
    
    pkgconfig = find_program('pkg-config')
    cflags_cmd = run_command(pkgconfig, '--cflags', 'libdpdk', check: true)
    ldflags_cmd = run_command(pkgconfig, '--static', '--libs', 'libdpdk', check: true)
    
    cflags = cflags_cmd.stdout().split()
    ldflags = ldflags_cmd.stdout().split()
    
    sources = files('main.c')
    executable('dpdk-app', sources, c_args: cflags, link_args: ldflags)
    

    Steps:

    1. copy dpdk example helloworld into a custom folder (example: /tmp/mytest)
    2. add the meson.build to the folder.
    3. populate the content with the shared steps as
    • use meson-ninja to build the application (meson build; ninja -C build)
    • application get built without any errors
    • run the application using ./build/dpdk-app (it works)

    But we get error, if we use meson build as

    project('test', 'c')
    
    dpdk = dependency('libdpdk', static: true)
    sources = files('main.c')
    executable('dpdk-app', sources, dependencies: dpdk, )
    

    Closely examining the error logs

    /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libpcap.a(bpf_filter.o): in function `bpf_validate':
    (.text+0x460): multiple definition of `bpf_validate'; /usr/local/lib/x86_64-linux-gnu/librte_bpf.a(librte_bpf_bpf_validate.c.o):bpf_validate.c:(.text+0x23c0): first defined here
    

    The error is coming from librte_bpf.a and libpcap.a.

    To work around the issue, please update meson build to

    project('test', 'c',)
    
    dpdk = dependency('libdpdk', static: true)
    sources = files('main.c')
    executable('dpdk-app', sources, dependencies: dpdk, link_args : ['-lsystemd', '-Wl,--allow-multiple-definition',])
    

    As shared above there is no issue with DPDK or pkg-config if the settings are correct. But actual error is from libraries housing the same function name and code.