[dpdk-dev] Undefined reference to FUSE

Message ID BC0FEEC7D7650749874CEC11314A88F7306C9727@IRSMSX104.ger.corp.intel.com (mailing list archive)
State Not Applicable, archived
Headers

Commit Message

Traynor, Kevin March 16, 2015, 6:42 p.m. UTC
  > -----Original Message-----

> From: IñakiMurillo [mailto:inaki.murilloa@ehu.eus]

> Sent: Monday, March 16, 2015 4:37 PM

> To: Traynor, Kevin

> Cc: De Lara Guarch, Pablo; dev@dpdk.org

> Subject: Re: [dpdk-dev] Undefined reference to FUSE

> 

> Hello,

> 

> I have done what you said but it does not work.  I did it in the server

> I usually use and in a VM, in both of them appears the error.

> To be clear, I have followed the next instructions:

> 

> apt-get install fuse

> apt-get install libfuse-dev

> download dpdk-1.8.0

> modify common_linuxapp:

> +CONFIG_RTE_BUILD_COMBINE_LIBS=y

> +CONFIG_RTE_LIBRTE_VHOST=y

> make config T=x86_64-native-linuxapp-gcc

> make install T=x86_64-native-linuxapp-gcc

> 

> git clone ovs

> apply next patch:

> http://openvswitch.org/pipermail/dev/2015-March/052061.html

> ./boot.sh

> ./configure --with-dpdk=$DPDK_BUILD

> make

> 

> Is anything wrong with it?


I don't see anything obvious that's wrong. I've just checked it now on 
my own system with the commit I rebased against and it's compiling ok.
I'm on F20 with 3.16. The part of the patch that adds the fuse library 
is below, so you could check to make sure it has applied ok.

master when I'm back in the office on Wednesday. 

> 

> Thank you in advanced.

> 

> Regards,

> Iñaki

> 

> 

> 

> El 16/03/15 a las 14:56, Traynor, Kevin escribió:

> >> -----Original Message-----

> >> From: IñakiMurillo [mailto:inaki.murilloa@ehu.eus]

> >> Sent: Monday, March 16, 2015 9:47 AM

> >> To: Traynor, Kevin; De Lara Guarch, Pablo; dev@dpdk.org

> >> Subject: Re: [dpdk-dev] Undefined reference to FUSE

> >>

> >> Hello,

> >>

> >> I have done a fresh install of dpdk-1.8.0 and ovs master brunch of

> >> github with the next patches:

> >>

> >> OVS: http://openvswitch.org/pipermail/dev/2015-March/052061.html

> >> DPDK: http://dpdk.org/dev/patchwork/patch/2603/

> > Hi, can you try again except use tagged DPDK v1.8.0 without any patches to

> > it. Just turn COMBINE_LIB and VHOST_LIB settings to y. It might not be the

> > problem, but best to rule out as that's how we tested.

> >

> > I rebased at the time to commit id 7cc398 on OVS master.

> >

> >> I still get the same error while compiling the ovs. I followed the same

> >> instructions as I mentioned in passed emails.

> >>

> >> Any suggestions?

> >>

> >> Thank you in advanced.

> >>

> >> Regards,

> >>

> >> Iñaki

> >>

> >> El 13/03/15 a las 15:43, Traynor, Kevin escribió:

> >>>> -----Original Message-----

> >>>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of IñakiMurillo

> >>>> Sent: Friday, March 13, 2015 2:39 PM

> >>>> To: De Lara Guarch, Pablo; dev@dpdk.org

> >>>> Subject: Re: [dpdk-dev] Undefined reference to FUSE

> >>>>

> >>>> Hi Pablo,

> >>>>

> >>>> Thank you very much, it worked for me.

> >>>>

> >>>> But now I am trying to compile openvswicth after applying the next

> patch:

> >>>>

> >>>> http://openvswitch.org/pipermail/dev/2015-January/050278.html

> >>>>

> >>>> And it happends the same. I gues that I should ask in the ovs mail list,

> >>>> but in case you know the answer I ask here.

> >>> For ovs, if you use the head of master and the latest vhost patch, you

> >>> shouldn't see that error

> >>> http://openvswitch.org/pipermail/dev/2015-March/052061.html

> >>>

> >>>

> >>>> Thank you in advanced.

> >>>>

> >>>> Regards,

> >>>>

> >>>> Iñaki

> >>>>

> >>>>

> >>>> El 13/03/15 a las 13:09, De Lara Guarch, Pablo escribió:

> >>>>> Hi Iñaki,

> >>>>>

> >>>>>> -----Original Message-----

> >>>>>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of IñakiMurillo

> >>>>>> Sent: Friday, March 13, 2015 11:50 AM

> >>>>>> To: dev@dpdk.org

> >>>>>> Subject: [dpdk-dev] Undefined reference to FUSE

> >>>>>>

> >>>>>> Hello,

> >>>>>>

> >>>>>> I am trying to compile the vhost example using DPDK 1.8.0. I have

> >>>>>> installed fuse and libfuse-dev (as I am using Ubuntu). I have modified

> >>>>>> config/common_linuxapp as follows:

> >>>>>>

> >>>>>> CONFIG_RTE_BUILD_COMBINE_LIBS=y

> >>>>>> CONFIG_RTE_LIBRTE_VHOST=y

> >>>>>>

> >>>>>> Then, I compile DPDK 1.8.0 as follows:

> >>>>>>

> >>>>>> make config T=x86_64-native-linuxapp-gcc

> >>>>>> make install T=x86_64-native-linuxapp-gcc

> >>>>>>

> >>>>>> And when it comes to compile vhost example I get errors about

> undefined

> >>>>>> reference. To compile it I use theses intructions:

> >>>>>>

> >>>>>> export RTE_SDK=/path/to/dpdk-1.8.0

> >>>>>> export RTE_TARGET=x86_64-native-linuxapp-gcc

> >>>>>> make

> >>>>>>

> >>>>>> The log of the error is:

> >>>>>>

> >>>>>>

> >>>>>> CC main.o

> >>>>>>   LD vhost-switch

> >>>>>> /home/imurillo/virtio_dpdk_1_8/dpdk-1.8.0/x86_64-native-linuxapp-

> >>>>>> gcc/lib/libintel_dpdk.a(vhost-net-cdev.o):

> >>>>>> In function `vhost_net_ioctl':

> >>>>>> vhost-net-cdev.c:(.text+0x3c): undefined reference to `fuse_req_ctx'

> >>>>>> vhost-net-cdev.c:(.text+0xd5): undefined reference to

> >>>>>> `fuse_reply_ioctl_retry'

> >>>>>> vhost-net-cdev.c:(.text+0x185): undefined reference to

> >> `fuse_reply_ioctl'

> >>>>>> vhost-net-cdev.c:(.text+0x253): undefined reference to

> >>>>>> `fuse_reply_ioctl_retry'

> >>>>>> vhost-net-cdev.c:(.text+0x2c2): undefined reference to

> >> `fuse_reply_ioctl'

> >>>>>> vhost-net-cdev.c:(.text+0x30a): undefined reference to

> `fuse_reply_err'

> >>>>>> vhost-net-cdev.c:(.text+0x359): undefined reference to

> >>>>>> `fuse_reply_ioctl_retry'

> >>>>>> vhost-net-cdev.c:(.text+0x472): undefined reference to

> >> `fuse_reply_ioctl'

> >>>>>> vhost-net-cdev.c:(.text+0x49f): undefined reference to

> >> `fuse_reply_ioctl'

> >>>>>> vhost-net-cdev.c:(.text+0x4ea): undefined reference to

> >> `fuse_reply_ioctl'

> >>>>>> /home/imurillo/virtio_dpdk_1_8/dpdk-1.8.0/x86_64-native-linuxapp-

> >>>>>> gcc/lib/libintel_dpdk.a(vhost-net-cdev.o):

> >>>>>> In function `vhost_net_release':

> >>>>>> vhost-net-cdev.c:(.text+0x515): undefined reference to `fuse_req_ctx'

> >>>>>> /home/imurillo/virtio_dpdk_1_8/dpdk-1.8.0/x86_64-native-linuxapp-

> >>>>>> gcc/lib/libintel_dpdk.a(vhost-net-cdev.o):

> >>>>>> In function `vhost_net_open':

> >>>>>> vhost-net-cdev.c:(.text+0x58d): undefined reference to `fuse_req_ctx'

> >>>>>> /home/imurillo/virtio_dpdk_1_8/dpdk-1.8.0/x86_64-native-linuxapp-

> >>>>>> gcc/lib/libintel_dpdk.a(vhost-net-cdev.o):

> >>>>>> In function `rte_vhost_driver_register':

> >>>>>> vhost-net-cdev.c:(.text+0x828): undefined reference to

> >>>>>> `cuse_lowlevel_setup'

> >>>>>> /home/imurillo/virtio_dpdk_1_8/dpdk-1.8.0/x86_64-native-linuxapp-

> >>>>>> gcc/lib/libintel_dpdk.a(vhost-net-cdev.o):

> >>>>>> In function `rte_vhost_driver_session_start':

> >>>>>> vhost-net-cdev.c:(.text+0x86c): undefined reference to

> >> `fuse_session_loop'

> >>>>>> /home/imurillo/virtio_dpdk_1_8/dpdk-1.8.0/x86_64-native-linuxapp-

> >>>>>> gcc/lib/libintel_dpdk.a(vhost-net-cdev.o):

> >>>>>> In function `vhost_net_release':

> >>>>>> vhost-net-cdev.c:(.text+0x55b): undefined reference to

> `fuse_reply_err'

> >>>>>> /home/imurillo/virtio_dpdk_1_8/dpdk-1.8.0/x86_64-native-linuxapp-

> >>>>>> gcc/lib/libintel_dpdk.a(vhost-net-cdev.o):

> >>>>>> In function `vhost_net_open':

> >>>>>> vhost-net-cdev.c:(.text+0x5d3): undefined reference to

> `fuse_reply_open'

> >>>>>> vhost-net-cdev.c:(.text+0x5ef): undefined reference to

> `fuse_reply_err'

> >>>>>> collect2: ld returned 1 exit status

> >>>>>> make[1]: *** [vhost-switch] Error 1

> >>>>>> make: *** [all] Error 2

> >>>>>>

> >>>>>>

> >>>>>> Can anyone help me?

> >>>>> This was fixed after 1.8.0, on this patch:

> >>>>> http://dpdk.org/dev/patchwork/patch/2603/

> >>>>>

> >>>>> You can either apply it yourself or get the latest code using git.

> >>>>>

> >>>>> Regards,

> >>>>> Pablo

> >>>>>> Thank you in advanced.

> >>>>>>
  

Comments

Verbeiren, David March 18, 2015, 9:37 a.m. UTC | #1
>> I have done what you said but it does not work.  I did it in the 

>> server I usually use and in a VM, in both of them appears the error.

>> To be clear, I have followed the next instructions: 

>> 

>> apt-get install fuse

>> apt-get install libfuse-dev

>> download dpdk-1.8.0

>> modify common_linuxapp:

>> +CONFIG_RTE_BUILD_COMBINE_LIBS=y

>> +CONFIG_RTE_LIBRTE_VHOST=y

>> make config T=x86_64-native-linuxapp-gcc make install 

>> T=x86_64-native-linuxapp-gcc

>> 

>> git clone ovs

>> apply next patch:

>> http://openvswitch.org/pipermail/dev/2015-March/052061.html

>> ./boot.sh

>> ./configure --with-dpdk=$DPDK_BUILD

>> make

>> 

>> Is anything wrong with it? 

>

> I don't see anything obvious that's wrong. I've just checked it now on my own system with the commit I rebased against and it's compiling ok.

> I'm on F20 with 3.16. The part of the patch that adds the fuse library is below, so you could check to make sure it has applied ok.

>

> diff --git a/lib/automake.mk b/lib/automake.mk index 2acfe18..594dec4 100644

> --- a/lib/automake.mk

> +++ b/lib/automake.mk

> @@ -346,6 +346,7 @@ lib_libopenvswitch_la_SOURCES += \  endif

>  

>  if DPDK_NETDEV

> +lib_libopenvswitch_la_LDFLAGS += -lfuse

>

>

> After that I'm not really sure where to go. I'll try it on the head of master when I'm back in the office on Wednesday. 


I can confirm this problem, at least on Ubuntu (14.10). I believe it is due to the fact that dependencies on shared objects (-lfuse) are not captured in .la files. Hence when executables are linked with libopenvswitch.a, the -lfuse link flag doesn't get added automatically.
I've seen this on another project but I'm not sure what is the proper solution. The difference with other shared objects (e.g. -ldl) is that those get added during configure step and land into $(LIBS) that then gets widely applied.

The easy workaround though is to add -lfuse to LIBS at ovs make invocation time:
 make LIBS=-lfuse
  

Patch

diff --git a/lib/automake.mk b/lib/automake.mk
index 2acfe18..594dec4 100644
--- a/lib/automake.mk
+++ b/lib/automake.mk
@@ -346,6 +346,7 @@  lib_libopenvswitch_la_SOURCES += \
 endif
 
 if DPDK_NETDEV
+lib_libopenvswitch_la_LDFLAGS += -lfuse


After that I'm not really sure where to go. I'll try it on the head of