> On Sep 13, 2018, at 10:18 AM, Amedeo Sapio <[email protected]> wrote:
>
> The problem here was that DPDK libraries should be linked with the
> '--whole-archive' option. All the credit goes to the guy that answered on
> stack overflow.
> I did not find this information in the documentation. Maybe it should be
> added on this page.
Not sure it is covered in other parts of the Doc, but here would be a thing too.
We do like patches to the docs and it would be great if you would think about
sending one in to fix it.
>
> ---
> Amedeo
>
>
> On Tue, Sep 11, 2018 at 5:56 PM Amedeo Sapio <[email protected]>
> wrote:
> Thanks Keith for your answer.
> If I understand it correctly, you are suggesting to wrap the code that needs
> DPDK in a library and then call the functions in this library from my code.
> That is exactly what I did.
> I called rte_eal_init() before any other dpdk function. The dpdk code was
> tested and worked when compiled as an APP, but the same code did not work
> when used as library.
>
> The example with l2fwd is representative of what I am trying to do.
> I took the exact same code of the l2fwd example, then:
> - renamed the "main" function as "start"
> - I added an header file with the signature of the "start" function
> - compiled as a libf2wd.a file.
> - created a new file with the new main function. This simply calls the
> "start" function passing the argc,argv params.
> - compiled this new file with "gcc -l l2fwd -l dpdk -pthread -l dl -l numa
> ..."
>
> When I run it I get:
> EAL: Error - exiting with code: 1
> Cause: No Ethernet ports - bye
>
> PS: I am sorry about the disclaimer, it is not under my control, it is
> inserted automatically by my university mail system.
>
> Amedeo
>
> On Tue, Sep 11, 2018 at 5:07 PM Wiles, Keith <[email protected]> wrote:
>
>
> > On Sep 11, 2018, at 5:49 AM, Amedeo Sapio <[email protected]> wrote:
> >
> > Dear all,
> > I am writing a program that uses dpdk. I wrote the program based on the
> > dpdk examples, in particular using the Makefile provided in the examples.
> > If i compile the program as an APP (as describe here
> > <https://doc.dpdk.org/guides-18.02/prog_guide/build_app.html>), all goes
> > well.
>
> Sounds like you and this person need to get together here :-)
> https://mails.dpdk.org/archives/users/2018-September/003439.html
>
> > However, my code is part of a larger project, for which the use of a
> > separate makefile causes a lot of troubles.
> > So I compiled my code as a library, as described in the same page.
> > Now, the program that calls the functions in the library (to initialize the
> > EAL) is getting this error:
> >
>
> Did you call rte_eal_init() first as most of the routines depend on calling
> this function before you call the other one.
>
> As I explained the other thread, is that DPDK is not libc and you can not
> just pick the functions you want to use for the most part. Some functions are
> fairly independent, but not really as work is needed to make sure it has all
> of the other inits called.
>
> If you want to use DPDK today, the best method is to make sure you initialize
> DPDK correctly and then you can use parts of it for your needs.
>
> As for the code that interacts with your application it is best to have a
> directory with just the functions you need to build with DPDK and use these
> functions as a bridge to/from your code. Using your header files and DPDK
> header files in the same directory or file can cause a number of build
> problems, which is why I use this type of method. Some routines in DPDK you
> can call without any real problems, but sometimes it makes it easier to write
> inline functions or functions that build most independent of DPDK and your
> routines. Not sure explained it clearly, but I hope it helps.
>
> BTW, please remove any disclaimers in your email as they do not apply to a
> public email list.
>
> > MBUF: error setting mempool handler
> > Cannot init mbuf pool
> >
> > I also made an experiment with the l2fwd example. The example compiled as
> > an app works correctly. But if I compile it as a library and then I call
> > the functions in this library from another program, I get:
> >
> > EAL: Error - exiting with code: 1
> > Cause: No Ethernet ports - bye
> >
> > I have one ethernet port using the igb_uio driver (seen from
> > dpdk-devbind.py). When I compile my program, I link the following
> > libraries: dpdk, pthread, dl, numa. DPDK is compiled from source as
> > described here <https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html>.
> >
> > Thanks for your help,
> >
> > ---
> > Amedeo
> >
> > --
> >
> > This message and its contents, including attachments are intended solely
> > for the original recipient. If you are not the intended recipient or have
> > received this message in error, please notify me immediately and delete
> > this message from your computer system. Any unauthorized use or
> > distribution is prohibited. Please consider the environment before printing
> > this email.
>
> Regards,
> Keith
>
>
> --
>
> This message and its contents, including attachments are intended solely
> for the original recipient. If you are not the intended recipient or have
> received this message in error, please notify me immediately and delete
> this message from your computer system. Any unauthorized use or
> distribution is prohibited. Please consider the environment before printing
> this email.
>
> This message and its contents, including attachments are intended solely for
> the original recipient. If you are not the intended recipient or have
> received this message in error, please notify me immediately and delete this
> message from your computer system. Any unauthorized use or distribution is
> prohibited. Please consider the environment before printing this email.
Regards,
Keith