DPDK patches and discussions
 help / color / mirror / Atom feed
From: Neil Horman <nhorman@tuxdriver.com>
To: tom.barbette@uliege.be
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] Linking with -ldpdk
Date: Mon, 19 Feb 2018 09:04:10 -0500	[thread overview]
Message-ID: <20180219140410.GA3527@hmswarspite.think-freely.org> (raw)
In-Reply-To: <328301853.77122566.1519033179263.JavaMail.zimbra@uliege.be>

On Mon, Feb 19, 2018 at 10:39:39AM +0100, tom.barbette@uliege.be wrote:
> Hi list,
> 
> I found out that to staticly compile against DPDK using the combined lib, I needed all these options :
> 
> -I${RTE_SDK}/${RTE_TARGET}/include -L${RTE_SDK}/${RTE_TARGET}/lib -Wl,--whole-archive -ldpdk -Wl,--no-whole-archive -lnuma -ldl -lpthread -lm -lmlx4 -lmlx5 -libverbs
> 
> The whole-archive makes sense, as we need to embed drivers that wouldn't be found at linking time (failing to include it prevents port discovery).
> However it leads to missing inclusion. That's why I added all the libs at the end of the line. The mlx4 libs particularly leads me to think that there must be a more programmatic way, portable accross versions of DPDK to find out which libraries referenced in DPDK I should include, right? Morveover if the DPDK user didn't include mlx4, it will fail to compile...
> 
Thats really the problem with static linking, theres no built-in dependency
tracking, the way the DT_NEEDED entries provide in dynamic linking.  The build
environment is responsible for understanding the libraries needed to resolve all
the symbols that an application and its libraries require at compile time.  In
the case of the mlx drivers, I beleive there is an effort to break the symbol
dependency by using the dlopen interface to resolve those symbols at run time,
but the scope of that effort is strictly for the mellanox drivers.  You still
need to manually track the numa, pthreead, math, etc libraries.

> What should I use? (the whole rte.extapp.mk DPDK build process is not an option as the build system is rather complex in this project)
> 
I'd recommend building dpdk as a shared library.  Then the DSO embodies the
subordonate libraries that have to be loaded by the linker at run time, and you
don't have to worry about it at all.  You just have to link with -ldpdk (the
shared build creates a linker script called dpdk.so that automagically pulls in
all the component DSOs).

> Or maybe some of these libraries should be included in the dpdk static lib?
> 
Thats not a scalable solution.  Some libraries don't have static versions that
you can link to (or don't have versions that build commonly as such).  And even
if they do, determining if you need to link them is a bit of a trick.  As Bruce
notes, he's trying to use package-config to solve the problem, but that tool
isnt meant for conditional compilation.  

> I use the last git version (but it's the same problem with previous ones).
> 
> Thanks,
> 
> Tom
> 

      parent reply	other threads:[~2018-02-19 14:05 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-19  9:39 tom.barbette
2018-02-19 10:14 ` Bruce Richardson
2018-02-19 14:04 ` Neil Horman [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180219140410.GA3527@hmswarspite.think-freely.org \
    --to=nhorman@tuxdriver.com \
    --cc=dev@dpdk.org \
    --cc=tom.barbette@uliege.be \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).