Hey guys, We are trying to use dpdk (dpdk-stable-18.08.1) as a shared library. We have recompiled as a shared library by setting *CONFIG_RTE_BUILD_SHARED_LIB=y* My program compiles file and I can see the relevant libraries when I use ldd on the binary. I direct my binary look in the correct place by using export LD_LIBRARY_PATH and the binary appears to find the libraries. However, when the function rte_eth_dev_count_avail returns it returns a 0 and exits, when I run the same program with static libraries, it works correctly. Any help on this would be great! Regards, Justin ____ Justin Tallon Ph.D. Software Radio Systems (SRS) http://www.softwareradiosystems.com +353-86-067-0753 | justin.tallon@softwareradiosystems.com
On Fri, 18 Dec 2020 23:38:28 +0100
Justin Tallon <justin.tallon@softwareradiosystems.com> wrote:
> Hey guys,
>
> We are trying to use dpdk (dpdk-stable-18.08.1) as a shared library.
>
> We have recompiled as a shared library by setting
> *CONFIG_RTE_BUILD_SHARED_LIB=y*
>
> My program compiles file and I can see the relevant libraries when I use
> ldd on the binary.
>
> I direct my binary look in the correct place by using export
> LD_LIBRARY_PATH and the binary appears to find the libraries.
> However, when the function rte_eth_dev_count_avail returns it returns a 0
> and exits, when I run the same program with static libraries, it works
> correctly.
>
> Any help on this would be great!
>
> Regards,
> Justin
>
>
> ____
> Justin Tallon Ph.D.
>
> Software Radio Systems (SRS)
> http://www.softwareradiosystems.com
>
> +353-86-067-0753 | justin.tallon@softwareradiosystems.com
When used as a shared library DPDK does not automatically load any required poll
mode driver libraries. You have to pass -d flag to make it load what you want.
I consider this a bug (others do not), and think the DPDK should have a table
mapping PCI device id to the PMD shared library and automatically load the PMD
shared library (like the Linux kernel module autoloading works).
Hey Stephen, Thanks for the response, I have passed the directory of the dpdk library as you said with the -d flag. However, when I did this, I get the following error. libdpdk.so: invalid ELF header any help with this would be appreciated. Regards, Justin ____ Justin Tallon Ph.D. Software Radio Systems (SRS) http://www.softwareradiosystems.com +353-86-067-0753 | justin.tallon@softwareradiosystems.com On Sat, Dec 19, 2020 at 8:27 PM Stephen Hemminger < stephen@networkplumber.org> wrote: > On Fri, 18 Dec 2020 23:38:28 +0100 > Justin Tallon <justin.tallon@softwareradiosystems.com> wrote: > > > Hey guys, > > > > We are trying to use dpdk (dpdk-stable-18.08.1) as a shared library. > > > > We have recompiled as a shared library by setting > > *CONFIG_RTE_BUILD_SHARED_LIB=y* > > > > My program compiles file and I can see the relevant libraries when I use > > ldd on the binary. > > > > I direct my binary look in the correct place by using export > > LD_LIBRARY_PATH and the binary appears to find the libraries. > > However, when the function rte_eth_dev_count_avail returns it returns a 0 > > and exits, when I run the same program with static libraries, it works > > correctly. > > > > Any help on this would be great! > > > > Regards, > > Justin > > > > > > ____ > > Justin Tallon Ph.D. > > > > Software Radio Systems (SRS) > > http://www.softwareradiosystems.com > > > > +353-86-067-0753 | justin.tallon@softwareradiosystems.com > > When used as a shared library DPDK does not automatically load any > required poll > mode driver libraries. You have to pass -d flag to make it load what you > want. > > I consider this a bug (others do not), and think the DPDK should have a > table > mapping PCI device id to the PMD shared library and automatically load the > PMD > shared library (like the Linux kernel module autoloading works). > >
On Tue, 22 Dec 2020 00:20:51 +0100
Justin Tallon <justin.tallon@softwareradiosystems.com> wrote:
> Hey Stephen,
>
> Thanks for the response, I have passed the directory of the dpdk library as
> you said with the -d flag.
>
> However, when I did this, I get the following error.
>
> libdpdk.so: invalid ELF header
>
> any help with this would be appreciated.
>
> Regards,
> Justin
>
You need to pass the individual pmd library name.
libdpdk.so is a linker script, not a real shared library.
It disappeared in later versions.
Hey Stephen, Thanks for your help previously, I am again having issues with passing shared libraries of dpdk. I am getting the following error EAL: RTE_LPM tailq is already registered PANIC in tailqinitfn_rte_lpm_tailq(): Cannot initialize tailq: RTE_LPM Only when using dpdk as a shared library, I have tried many things but there is very little online about this, any suggestions would be appreciated! Thanks, Justin ____ Justin Tallon Ph.D. Software Radio Systems (SRS) http://www.softwareradiosystems.com +353-86-067-0753 | justin.tallon@softwareradiosystems.com On Tue, Dec 22, 2020 at 12:33 AM Stephen Hemminger < stephen@networkplumber.org> wrote: > On Tue, 22 Dec 2020 00:20:51 +0100 > Justin Tallon <justin.tallon@softwareradiosystems.com> wrote: > > > Hey Stephen, > > > > Thanks for the response, I have passed the directory of the dpdk library > as > > you said with the -d flag. > > > > However, when I did this, I get the following error. > > > > libdpdk.so: invalid ELF header > > > > any help with this would be appreciated. > > > > Regards, > > Justin > > > > You need to pass the individual pmd library name. > libdpdk.so is a linker script, not a real shared library. > It disappeared in later versions. >