build/pkg-config: prevent overlinking
Add the --as-needed linker flag to the DPDK library list in the pkg-config file so as to prevent overlinking. Without this flag, when linking statically using flags from $(pkg-config --static --libs libdpdk), all DPDK drivers and libs were statically linked in, but the binary was also requiring all the shared versions be present to run. The real root-cause of this issue is that the DPDK libraries need to be duplicated in the linker command when doing static linking, due to the behaviour of pkg-config, but since that behaviour cannot be easily changed, this is a simple workaround to avoid problems. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Luca Boccassi <bluca@debian.org> Acked-by: Sunil Pai G <sunil.pai.g@intel.com> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
This commit is contained in:
parent
8549295db0
commit
b98447077b
@ -21,6 +21,11 @@ endif
|
|||||||
# Another requirement is to allow linking dependencies as shared libraries,
|
# Another requirement is to allow linking dependencies as shared libraries,
|
||||||
# while linking static DPDK libraries and drivers. It is satisfied by
|
# while linking static DPDK libraries and drivers. It is satisfied by
|
||||||
# listing the static files in Libs.private with the explicit syntax -l:libfoo.a.
|
# listing the static files in Libs.private with the explicit syntax -l:libfoo.a.
|
||||||
|
# As a consequence, the regular DPDK libraries are already listed as static
|
||||||
|
# in the field Libs.private. The second occurences of DPDK libraries,
|
||||||
|
# included from Requires and used for shared library linkage case,
|
||||||
|
# are skipped in the case of static linkage thanks to the flag --as-needed.
|
||||||
|
|
||||||
|
|
||||||
pkg.generate(name: 'dpdk-libs',
|
pkg.generate(name: 'dpdk-libs',
|
||||||
filebase: 'libdpdk-libs',
|
filebase: 'libdpdk-libs',
|
||||||
@ -29,7 +34,7 @@ Use libdpdk.pc instead of this file to query DPDK compile/link arguments''',
|
|||||||
version: meson.project_version(),
|
version: meson.project_version(),
|
||||||
subdirs: [get_option('include_subdir_arch'), '.'],
|
subdirs: [get_option('include_subdir_arch'), '.'],
|
||||||
extra_cflags: pkg_extra_cflags,
|
extra_cflags: pkg_extra_cflags,
|
||||||
libraries: dpdk_libraries,
|
libraries: ['-Wl,--as-needed'] + dpdk_libraries,
|
||||||
libraries_private: dpdk_extra_ldflags)
|
libraries_private: dpdk_extra_ldflags)
|
||||||
|
|
||||||
pkg.generate(name: 'DPDK', # main DPDK pkgconfig file
|
pkg.generate(name: 'DPDK', # main DPDK pkgconfig file
|
||||||
|
Loading…
Reference in New Issue
Block a user