[dpdk-dev] building shared library

Neil Horman nhorman at tuxdriver.com
Tue Nov 11 16:54:08 CET 2014


On Tue, Nov 11, 2014 at 03:26:04PM +0000, De Lara Guarch, Pablo wrote:
> 
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Newman Poborsky
> > Sent: Tuesday, November 11, 2014 3:17 PM
> > To: Gonzalez Monroy, Sergio
> > Cc: dev at dpdk.org
> > Subject: Re: [dpdk-dev] building shared library
> > 
> > Hi,
> > 
> > after building DPDK libs as shared libraries and linking it, I'm back to my
> > first problem: rte_eal_driver_register() never gest called and my app
> > crashes since there are no drivers registered.  As previously mentioned, in
> > regular DPDK user app this functions is called for every driver before
> > main(). How?
> 
> If I am not wrong here, you have to use the -d option to specify the driver you want to use.
> 
> Btw, the option you were looking for can be found in config/common_linuxapp or config/common_bsdapp.
> 

Alternatively, when you link your application you can speify
-llibrte_pmd_<driver> and your applicaion should call all the constructors when
the dynamic loader hits your binaries DT_NEEDED table.  Thats how you can avoid
the command line specification.

Neil

> Pablo
> > 
> > BR,
> > Newman
> > 
> > On Tue, Nov 11, 2014 at 3:44 PM, Newman Poborsky
> > <newman555p at gmail.com>
> > wrote:
> > 
> > > Hi Sergio,
> > >
> > > no, that sounds good, thank you.  Since I'm not that familiar with DPDK
> > > build system, where should this option be set? In 'lib' folder's Makefile?
> > >
> > > Thank you once again!
> > >
> > > BR,
> > > Newman
> > >
> > > On Tue, Nov 11, 2014 at 3:18 PM, Sergio Gonzalez Monroy <
> > > sergio.gonzalez.monroy at intel.com> wrote:
> > >
> > >> On Tue, Nov 11, 2014 at 01:10:29PM +0100, Newman Poborsky wrote:
> > >> > Hi,
> > >> >
> > >> > I want to build one .so file with my app (it contains API that I want to
> > >> > call through JNI) and all DPDK libs that I use in my app.
> > >> >
> > >> > As I've already mentioned, when I build and start my dpdk app as a
> > >> > standalone application, I can see that before main() is called, there
> > >> is a
> > >> > call to 'rte_eal_driver_register()' function for every driver. When I
> > >> build
> > >> > .so file, this does not happen and no driver is registered so everyting
> > >> > after rte_eal_init() fails.
> > >> >
> > >> Hi Newman,
> > >>
> > >> AFAIK the current build system does not support that.
> > >>
> > >> You can build DPDK as shared libs by setting the following config option:
> > >> CONFIG_RTE_BUILD_SHARED_LIB=y
> > >>
> > >> Then build your app as an .so that links against DPDK libs, so you have
> > >> explicit dependencies (such dependencies should show with ldd).
> > >>
> > >> Is there any reason why you want everything to be a single .so ?
> > >>
> > >> I don't know much about how Java loads DSOs but I reckon that it must
> > >> resolve
> > >> explicit dependencies such as libc.
> > >>
> > >> Thanks,
> > >> Sergio
> > >>
> > >>
> > >> >
> > >> > BR,
> > >> > Newman
> > >> >
> > >>
> > >
> > >


More information about the dev mailing list