[dpdk-dev] mk: fix link to combined library

Message ID 7F861DC0615E0C47A872E6F3C5FCDDBD05DD6DFE@BPXM14GP.gisp.nec.co.jp (mailing list archive)
State Accepted, archived
Headers

Commit Message

Hiroshi Shimamoto Dec. 11, 2014, 2:54 a.m. UTC
  From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>

The application should be linked to the single combined library in the
condition that both of CONFIG_RTE_BUILD_COMBINE_LIB and
CONFIG_RTE_BUILD_SHARED_LIB are enabled.

The current makefile generates an application that links to each library.
This patch fixes to link the single library.

Before
$ ldd x86_64-ivshmem-linuxapp-gcc/app/test
	linux-vdso.so.1 =>  (0x00007fff232a1000)
	librte_distributor.so => not found
	librte_kni.so => not found
	librte_ivshmem.so => not found
	librte_pipeline.so => not found
	librte_table.so => not found
	librte_port.so => not found
	librte_timer.so => not found
	librte_hash.so => not found
	librte_lpm.so => not found
	librte_power.so => not found
	librte_acl.so => not found
	librte_meter.so => not found
	librte_sched.so => not found
	libm.so.6 => /lib64/libm.so.6 (0x00007fc638020000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fc637e18000)
	librte_kvargs.so => not found
	librte_mbuf.so => not found
	librte_ip_frag.so => not found
	libethdev.so => not found
	librte_malloc.so => not found
	librte_mempool.so => not found
	librte_ring.so => not found
	librte_eal.so => not found
	librte_cmdline.so => not found
	librte_cfgfile.so => not found
	librte_pmd_bond.so => not found
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc637bfe000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc6379fa000)
	libintel_dpdk.so => not found
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc6377dd000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fc63741c000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fc638330000)

After
$ ldd x86_64-ivshmem-linuxapp-gcc/app/test
	linux-vdso.so.1 =>  (0x00007fffb79fe000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f0d8a971000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f0d8a66f000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0d8a458000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d8a254000)
	libintel_dpdk.so => not found
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0d8a037000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f0d89c76000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0d8ab82000)

Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Reviewed-by: Hayato Momma <h-momma@ce.jp.nec.com>
---
 mk/rte.app.mk | 8 ++++++++
 1 file changed, 8 insertions(+)
  

Comments

Thomas Monjalon Dec. 16, 2014, 11:45 p.m. UTC | #1
2014-12-11 02:54, Hiroshi Shimamoto:
> From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> 
> The application should be linked to the single combined library in the
> condition that both of CONFIG_RTE_BUILD_COMBINE_LIB and
> CONFIG_RTE_BUILD_SHARED_LIB are enabled.
> 
> The current makefile generates an application that links to each library.
> This patch fixes to link the single library.
> 
> Before
> $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> 	linux-vdso.so.1 =>  (0x00007fff232a1000)
> 	librte_distributor.so => not found
> 	librte_kni.so => not found
> 	librte_ivshmem.so => not found
> 	librte_pipeline.so => not found
> 	librte_table.so => not found
> 	librte_port.so => not found
> 	librte_timer.so => not found
> 	librte_hash.so => not found
> 	librte_lpm.so => not found
> 	librte_power.so => not found
> 	librte_acl.so => not found
> 	librte_meter.so => not found
> 	librte_sched.so => not found
> 	libm.so.6 => /lib64/libm.so.6 (0x00007fc638020000)
> 	librt.so.1 => /lib64/librt.so.1 (0x00007fc637e18000)
> 	librte_kvargs.so => not found
> 	librte_mbuf.so => not found
> 	librte_ip_frag.so => not found
> 	libethdev.so => not found
> 	librte_malloc.so => not found
> 	librte_mempool.so => not found
> 	librte_ring.so => not found
> 	librte_eal.so => not found
> 	librte_cmdline.so => not found
> 	librte_cfgfile.so => not found
> 	librte_pmd_bond.so => not found
> 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc637bfe000)
> 	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc6379fa000)
> 	libintel_dpdk.so => not found
> 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc6377dd000)
> 	libc.so.6 => /lib64/libc.so.6 (0x00007fc63741c000)
> 	/lib64/ld-linux-x86-64.so.2 (0x00007fc638330000)
> 
> After
> $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> 	linux-vdso.so.1 =>  (0x00007fffb79fe000)
> 	librt.so.1 => /lib64/librt.so.1 (0x00007f0d8a971000)
> 	libm.so.6 => /lib64/libm.so.6 (0x00007f0d8a66f000)
> 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0d8a458000)
> 	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d8a254000)
> 	libintel_dpdk.so => not found
> 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0d8a037000)
> 	libc.so.6 => /lib64/libc.so.6 (0x00007f0d89c76000)
> 	/lib64/ld-linux-x86-64.so.2 (0x00007f0d8ab82000)
> 
> Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> Reviewed-by: Hayato Momma <h-momma@ce.jp.nec.com>

It is what I suggested to Sergio:
	http://dpdk.org/ml/archives/dev/2014-December/009116.html

Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>

Applied

Thanks
  
Bruce Richardson Dec. 17, 2014, 10:38 a.m. UTC | #2
On Wed, Dec 17, 2014 at 12:45:32AM +0100, Thomas Monjalon wrote:
> 2014-12-11 02:54, Hiroshi Shimamoto:
> > From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > 
> > The application should be linked to the single combined library in the
> > condition that both of CONFIG_RTE_BUILD_COMBINE_LIB and
> > CONFIG_RTE_BUILD_SHARED_LIB are enabled.
> > 
> > The current makefile generates an application that links to each library.
> > This patch fixes to link the single library.
> > 
> > Before
> > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > 	linux-vdso.so.1 =>  (0x00007fff232a1000)
> > 	librte_distributor.so => not found
> > 	librte_kni.so => not found
> > 	librte_ivshmem.so => not found
> > 	librte_pipeline.so => not found
> > 	librte_table.so => not found
> > 	librte_port.so => not found
> > 	librte_timer.so => not found
> > 	librte_hash.so => not found
> > 	librte_lpm.so => not found
> > 	librte_power.so => not found
> > 	librte_acl.so => not found
> > 	librte_meter.so => not found
> > 	librte_sched.so => not found
> > 	libm.so.6 => /lib64/libm.so.6 (0x00007fc638020000)
> > 	librt.so.1 => /lib64/librt.so.1 (0x00007fc637e18000)
> > 	librte_kvargs.so => not found
> > 	librte_mbuf.so => not found
> > 	librte_ip_frag.so => not found
> > 	libethdev.so => not found
> > 	librte_malloc.so => not found
> > 	librte_mempool.so => not found
> > 	librte_ring.so => not found
> > 	librte_eal.so => not found
> > 	librte_cmdline.so => not found
> > 	librte_cfgfile.so => not found
> > 	librte_pmd_bond.so => not found
> > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc637bfe000)
> > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc6379fa000)
> > 	libintel_dpdk.so => not found
> > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc6377dd000)
> > 	libc.so.6 => /lib64/libc.so.6 (0x00007fc63741c000)
> > 	/lib64/ld-linux-x86-64.so.2 (0x00007fc638330000)
> > 
> > After
> > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > 	linux-vdso.so.1 =>  (0x00007fffb79fe000)
> > 	librt.so.1 => /lib64/librt.so.1 (0x00007f0d8a971000)
> > 	libm.so.6 => /lib64/libm.so.6 (0x00007f0d8a66f000)
> > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0d8a458000)
> > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d8a254000)
> > 	libintel_dpdk.so => not found
> > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0d8a037000)
> > 	libc.so.6 => /lib64/libc.so.6 (0x00007f0d89c76000)
> > 	/lib64/ld-linux-x86-64.so.2 (0x00007f0d8ab82000)
> > 
> > Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > Reviewed-by: Hayato Momma <h-momma@ce.jp.nec.com>
> 
> It is what I suggested to Sergio:
> 	http://dpdk.org/ml/archives/dev/2014-December/009116.html
> 
> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> 
> Applied
> 
> Thanks
> -- 
> Thomas

None of the example apps are compiling for me today, and git bisect indicates that
this patch is the culprit. I'm investigating, but if flagging it here in case 
someone else finds a fix faster than I do.

The error is due to the libraries being missing on the link command, with the
out-of-the-box configuration i.e. individual static libs.

/Bruce

make: Entering directory `/home/bruce/dpdk.org/examples/helloworld'
mkdir -p /home/bruce/dpdk.org/examples/helloworld/build
make -C /home/bruce/dpdk.org/examples/helloworld/build -f /home/bruce/dpdk.org/examples/helloworld/Makefile \
        S=/home/bruce/dpdk.org/examples/helloworld O=/home/bruce/dpdk.org/examples/helloworld/build SRCDIR=/home/bruce/dpdk.org/examples/helloworld
gcc -m64 -pthread  -march=native -DRTE_MACHINE_CPUFLAG_SSE -DRTE_MACHINE_CPUFLAG_SSE2 -DRTE_MACHINE_CPUFLAG_SSE3 -DRTE_MACHINE_CPUFLAG_SSSE3 -DRTE_MACHINE_CPUFLAG_SSE4_1 -DRTE_MACHINE_CPUFLAG_SSE4_2 -DRTE_MACHINE_CPUFLAG_AES -DRTE_MACHINE_CPUFLAG_PCLMULQDQ -DRTE_MACHINE_CPUFLAG_AVX -DRTE_COMPILE_TIME_CPUFLAGS=RTE_CPUFLAG_SSE,RTE_CPUFLAG_SSE2,RTE_CPUFLAG_SSE3,RTE_CPUFLAG_SSSE3,RTE_CPUFLAG_SSE4_1,RTE_CPUFLAG_SSE4_2,RTE_CPUFLAG_AES,RTE_CPUFLAG_PCLMULQDQ,RTE_CPUFLAG_AVX  -I/home/bruce/dpdk.org/examples/helloworld/build/include -I/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include -include /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_config.h -O3 -W -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wpointer-arith -Wcast-align -Wnested-externs -Wcast-qual -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings  -Wl,-Map=helloworld.map,--cref -o helloworld main.o -Wl,--no-as-needed -Wl,-export-dynamic -L/home/bruce/dpdk.org/examples/helloworld/build/lib -L/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/lib  -L/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/lib -Wl,--whole-archive -Wl,--start-group -Wl,-lrt -Wl,-lm -Wl,-ldl -Wl,--end-group -Wl,--no-whole-archive
main.o: In function `rte_lcore_id':
/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:85: undefined reference to `per_lcore__lcore_id'
main.o: In function `main':
/home/bruce/dpdk.org/examples/helloworld/main.c:64: undefined reference to `rte_eal_init'
main.o: In function `rte_lcore_is_enabled':
/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:170: undefined reference to `rte_eal_get_configuration'
main.o: In function `rte_get_master_lcore':
/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:97: undefined reference to `rte_eal_get_configuration'
main.o: In function `rte_lcore_is_enabled':
/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:170: undefined reference to `rte_eal_get_configuration'
main.o: In function `rte_get_master_lcore':
/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:97: undefined reference to `rte_eal_get_configuration'
main.o: In function `main':
/home/bruce/dpdk.org/examples/helloworld/main.c:70: undefined reference to `rte_eal_remote_launch'
main.o: In function `rte_lcore_id':
/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:85: undefined reference to `per_lcore__lcore_id'
main.o: In function `main':
/home/bruce/dpdk.org/examples/helloworld/main.c:76: undefined reference to `rte_eal_mp_wait_lcore'
/home/bruce/dpdk.org/examples/helloworld/main.c:66: undefined reference to `__rte_panic'
collect2: error: ld returned 1 exit status
make[1]: *** [helloworld] Error 1
make: *** [all] Error 2
make: Leaving directory `/home/bruce/dpdk.org/examples/helloworld'
  
Bruce Richardson Dec. 17, 2014, 10:43 a.m. UTC | #3
On Wed, Dec 17, 2014 at 10:38:16AM +0000, Bruce Richardson wrote:
> On Wed, Dec 17, 2014 at 12:45:32AM +0100, Thomas Monjalon wrote:
> > 2014-12-11 02:54, Hiroshi Shimamoto:
> > > From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > 
> > > The application should be linked to the single combined library in the
> > > condition that both of CONFIG_RTE_BUILD_COMBINE_LIB and
> > > CONFIG_RTE_BUILD_SHARED_LIB are enabled.
> > > 
> > > The current makefile generates an application that links to each library.
> > > This patch fixes to link the single library.
> > > 
> > > Before
> > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > 	linux-vdso.so.1 =>  (0x00007fff232a1000)
> > > 	librte_distributor.so => not found
> > > 	librte_kni.so => not found
> > > 	librte_ivshmem.so => not found
> > > 	librte_pipeline.so => not found
> > > 	librte_table.so => not found
> > > 	librte_port.so => not found
> > > 	librte_timer.so => not found
> > > 	librte_hash.so => not found
> > > 	librte_lpm.so => not found
> > > 	librte_power.so => not found
> > > 	librte_acl.so => not found
> > > 	librte_meter.so => not found
> > > 	librte_sched.so => not found
> > > 	libm.so.6 => /lib64/libm.so.6 (0x00007fc638020000)
> > > 	librt.so.1 => /lib64/librt.so.1 (0x00007fc637e18000)
> > > 	librte_kvargs.so => not found
> > > 	librte_mbuf.so => not found
> > > 	librte_ip_frag.so => not found
> > > 	libethdev.so => not found
> > > 	librte_malloc.so => not found
> > > 	librte_mempool.so => not found
> > > 	librte_ring.so => not found
> > > 	librte_eal.so => not found
> > > 	librte_cmdline.so => not found
> > > 	librte_cfgfile.so => not found
> > > 	librte_pmd_bond.so => not found
> > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc637bfe000)
> > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc6379fa000)
> > > 	libintel_dpdk.so => not found
> > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc6377dd000)
> > > 	libc.so.6 => /lib64/libc.so.6 (0x00007fc63741c000)
> > > 	/lib64/ld-linux-x86-64.so.2 (0x00007fc638330000)
> > > 
> > > After
> > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > 	linux-vdso.so.1 =>  (0x00007fffb79fe000)
> > > 	librt.so.1 => /lib64/librt.so.1 (0x00007f0d8a971000)
> > > 	libm.so.6 => /lib64/libm.so.6 (0x00007f0d8a66f000)
> > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0d8a458000)
> > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d8a254000)
> > > 	libintel_dpdk.so => not found
> > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0d8a037000)
> > > 	libc.so.6 => /lib64/libc.so.6 (0x00007f0d89c76000)
> > > 	/lib64/ld-linux-x86-64.so.2 (0x00007f0d8ab82000)
> > > 
> > > Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > Reviewed-by: Hayato Momma <h-momma@ce.jp.nec.com>
> > 
> > It is what I suggested to Sergio:
> > 	http://dpdk.org/ml/archives/dev/2014-December/009116.html
> > 
> > Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> > 
> > Applied
> > 
> > Thanks
> > -- 
> > Thomas
> 
> None of the example apps are compiling for me today, and git bisect indicates that
> this patch is the culprit. I'm investigating, but if flagging it here in case 
> someone else finds a fix faster than I do.
> 
> The error is due to the libraries being missing on the link command, with the
> out-of-the-box configuration i.e. individual static libs.
> 
> /Bruce
> 
> make: Entering directory `/home/bruce/dpdk.org/examples/helloworld'
> mkdir -p /home/bruce/dpdk.org/examples/helloworld/build
> make -C /home/bruce/dpdk.org/examples/helloworld/build -f /home/bruce/dpdk.org/examples/helloworld/Makefile \
>         S=/home/bruce/dpdk.org/examples/helloworld O=/home/bruce/dpdk.org/examples/helloworld/build SRCDIR=/home/bruce/dpdk.org/examples/helloworld
> gcc -m64 -pthread  -march=native -DRTE_MACHINE_CPUFLAG_SSE -DRTE_MACHINE_CPUFLAG_SSE2 -DRTE_MACHINE_CPUFLAG_SSE3 -DRTE_MACHINE_CPUFLAG_SSSE3 -DRTE_MACHINE_CPUFLAG_SSE4_1 -DRTE_MACHINE_CPUFLAG_SSE4_2 -DRTE_MACHINE_CPUFLAG_AES -DRTE_MACHINE_CPUFLAG_PCLMULQDQ -DRTE_MACHINE_CPUFLAG_AVX -DRTE_COMPILE_TIME_CPUFLAGS=RTE_CPUFLAG_SSE,RTE_CPUFLAG_SSE2,RTE_CPUFLAG_SSE3,RTE_CPUFLAG_SSSE3,RTE_CPUFLAG_SSE4_1,RTE_CPUFLAG_SSE4_2,RTE_CPUFLAG_AES,RTE_CPUFLAG_PCLMULQDQ,RTE_CPUFLAG_AVX  -I/home/bruce/dpdk.org/examples/helloworld/build/include -I/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include -include /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_config.h -O3 -W -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wpointer-arith -Wcast-align -Wnested-externs -Wcast-qual -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings  -Wl,-Map=helloworld.map,--cref -o helloworld main.o -Wl,--no-as-needed -Wl,-export-dynamic -L/home/bruce/dpdk.org/examples/helloworld/build/lib -L/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/lib  -L/home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/lib -Wl,--whole-archive -Wl,--start-group -Wl,-lrt -Wl,-lm -Wl,-ldl -Wl,--end-group -Wl,--no-whole-archive
> main.o: In function `rte_lcore_id':
> /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:85: undefined reference to `per_lcore__lcore_id'
> main.o: In function `main':
> /home/bruce/dpdk.org/examples/helloworld/main.c:64: undefined reference to `rte_eal_init'
> main.o: In function `rte_lcore_is_enabled':
> /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:170: undefined reference to `rte_eal_get_configuration'
> main.o: In function `rte_get_master_lcore':
> /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:97: undefined reference to `rte_eal_get_configuration'
> main.o: In function `rte_lcore_is_enabled':
> /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:170: undefined reference to `rte_eal_get_configuration'
> main.o: In function `rte_get_master_lcore':
> /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:97: undefined reference to `rte_eal_get_configuration'
> main.o: In function `main':
> /home/bruce/dpdk.org/examples/helloworld/main.c:70: undefined reference to `rte_eal_remote_launch'
> main.o: In function `rte_lcore_id':
> /home/bruce/dpdk.org/x86_64-native-linuxapp-gcc/include/rte_lcore.h:85: undefined reference to `per_lcore__lcore_id'
> main.o: In function `main':
> /home/bruce/dpdk.org/examples/helloworld/main.c:76: undefined reference to `rte_eal_mp_wait_lcore'
> /home/bruce/dpdk.org/examples/helloworld/main.c:66: undefined reference to `__rte_panic'
> collect2: error: ld returned 1 exit status
> make[1]: *** [helloworld] Error 1
> make: *** [all] Error 2
> make: Leaving directory `/home/bruce/dpdk.org/examples/helloworld'
> 

Root cause appears to be use of "RTE_BUILD_COMBINE_LIBS" instead of "CONFIG_RTE_BUILD_COMBINE_LIBS"

Patch to follow.

Regards,
/Bruce
  
Thomas Monjalon Dec. 17, 2014, 10:43 a.m. UTC | #4
2014-12-17 10:38, Bruce Richardson:
> On Wed, Dec 17, 2014 at 12:45:32AM +0100, Thomas Monjalon wrote:
> > 2014-12-11 02:54, Hiroshi Shimamoto:
> > > From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > 
> > > The application should be linked to the single combined library in the
> > > condition that both of CONFIG_RTE_BUILD_COMBINE_LIB and
> > > CONFIG_RTE_BUILD_SHARED_LIB are enabled.
> > > 
> > > The current makefile generates an application that links to each library.
> > > This patch fixes to link the single library.
> > > 
> > > Before
> > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > 	linux-vdso.so.1 =>  (0x00007fff232a1000)
> > > 	librte_distributor.so => not found
> > > 	librte_kni.so => not found
> > > 	librte_ivshmem.so => not found
> > > 	librte_pipeline.so => not found
> > > 	librte_table.so => not found
> > > 	librte_port.so => not found
> > > 	librte_timer.so => not found
> > > 	librte_hash.so => not found
> > > 	librte_lpm.so => not found
> > > 	librte_power.so => not found
> > > 	librte_acl.so => not found
> > > 	librte_meter.so => not found
> > > 	librte_sched.so => not found
> > > 	libm.so.6 => /lib64/libm.so.6 (0x00007fc638020000)
> > > 	librt.so.1 => /lib64/librt.so.1 (0x00007fc637e18000)
> > > 	librte_kvargs.so => not found
> > > 	librte_mbuf.so => not found
> > > 	librte_ip_frag.so => not found
> > > 	libethdev.so => not found
> > > 	librte_malloc.so => not found
> > > 	librte_mempool.so => not found
> > > 	librte_ring.so => not found
> > > 	librte_eal.so => not found
> > > 	librte_cmdline.so => not found
> > > 	librte_cfgfile.so => not found
> > > 	librte_pmd_bond.so => not found
> > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc637bfe000)
> > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc6379fa000)
> > > 	libintel_dpdk.so => not found
> > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc6377dd000)
> > > 	libc.so.6 => /lib64/libc.so.6 (0x00007fc63741c000)
> > > 	/lib64/ld-linux-x86-64.so.2 (0x00007fc638330000)
> > > 
> > > After
> > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > 	linux-vdso.so.1 =>  (0x00007fffb79fe000)
> > > 	librt.so.1 => /lib64/librt.so.1 (0x00007f0d8a971000)
> > > 	libm.so.6 => /lib64/libm.so.6 (0x00007f0d8a66f000)
> > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0d8a458000)
> > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d8a254000)
> > > 	libintel_dpdk.so => not found
> > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0d8a037000)
> > > 	libc.so.6 => /lib64/libc.so.6 (0x00007f0d89c76000)
> > > 	/lib64/ld-linux-x86-64.so.2 (0x00007f0d8ab82000)
> > > 
> > > Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > Reviewed-by: Hayato Momma <h-momma@ce.jp.nec.com>
> > 
> > It is what I suggested to Sergio:
> > 	http://dpdk.org/ml/archives/dev/2014-December/009116.html
> > 
> > Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> > 
> > Applied
> > 
> > Thanks
> 
> None of the example apps are compiling for me today, and git bisect indicates that
> this patch is the culprit. I'm investigating, but if flagging it here in case 
> someone else finds a fix faster than I do.

Yes, Marvin already sent a patch:
	http://dpdk.org/dev/patchwork/patch/2049/

> The error is due to the libraries being missing on the link command, with the
> out-of-the-box configuration i.e. individual static libs.

Sorry, I forgot to test this basic case after applying the patch.
  
Bruce Richardson Dec. 17, 2014, 10:46 a.m. UTC | #5
On Wed, Dec 17, 2014 at 11:43:51AM +0100, Thomas Monjalon wrote:
> 2014-12-17 10:38, Bruce Richardson:
> > On Wed, Dec 17, 2014 at 12:45:32AM +0100, Thomas Monjalon wrote:
> > > 2014-12-11 02:54, Hiroshi Shimamoto:
> > > > From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > > 
> > > > The application should be linked to the single combined library in the
> > > > condition that both of CONFIG_RTE_BUILD_COMBINE_LIB and
> > > > CONFIG_RTE_BUILD_SHARED_LIB are enabled.
> > > > 
> > > > The current makefile generates an application that links to each library.
> > > > This patch fixes to link the single library.
> > > > 
> > > > Before
> > > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > > 	linux-vdso.so.1 =>  (0x00007fff232a1000)
> > > > 	librte_distributor.so => not found
> > > > 	librte_kni.so => not found
> > > > 	librte_ivshmem.so => not found
> > > > 	librte_pipeline.so => not found
> > > > 	librte_table.so => not found
> > > > 	librte_port.so => not found
> > > > 	librte_timer.so => not found
> > > > 	librte_hash.so => not found
> > > > 	librte_lpm.so => not found
> > > > 	librte_power.so => not found
> > > > 	librte_acl.so => not found
> > > > 	librte_meter.so => not found
> > > > 	librte_sched.so => not found
> > > > 	libm.so.6 => /lib64/libm.so.6 (0x00007fc638020000)
> > > > 	librt.so.1 => /lib64/librt.so.1 (0x00007fc637e18000)
> > > > 	librte_kvargs.so => not found
> > > > 	librte_mbuf.so => not found
> > > > 	librte_ip_frag.so => not found
> > > > 	libethdev.so => not found
> > > > 	librte_malloc.so => not found
> > > > 	librte_mempool.so => not found
> > > > 	librte_ring.so => not found
> > > > 	librte_eal.so => not found
> > > > 	librte_cmdline.so => not found
> > > > 	librte_cfgfile.so => not found
> > > > 	librte_pmd_bond.so => not found
> > > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc637bfe000)
> > > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc6379fa000)
> > > > 	libintel_dpdk.so => not found
> > > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc6377dd000)
> > > > 	libc.so.6 => /lib64/libc.so.6 (0x00007fc63741c000)
> > > > 	/lib64/ld-linux-x86-64.so.2 (0x00007fc638330000)
> > > > 
> > > > After
> > > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > > 	linux-vdso.so.1 =>  (0x00007fffb79fe000)
> > > > 	librt.so.1 => /lib64/librt.so.1 (0x00007f0d8a971000)
> > > > 	libm.so.6 => /lib64/libm.so.6 (0x00007f0d8a66f000)
> > > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0d8a458000)
> > > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d8a254000)
> > > > 	libintel_dpdk.so => not found
> > > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0d8a037000)
> > > > 	libc.so.6 => /lib64/libc.so.6 (0x00007f0d89c76000)
> > > > 	/lib64/ld-linux-x86-64.so.2 (0x00007f0d8ab82000)
> > > > 
> > > > Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > > Reviewed-by: Hayato Momma <h-momma@ce.jp.nec.com>
> > > 
> > > It is what I suggested to Sergio:
> > > 	http://dpdk.org/ml/archives/dev/2014-December/009116.html
> > > 
> > > Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> > > 
> > > Applied
> > > 
> > > Thanks
> > 
> > None of the example apps are compiling for me today, and git bisect indicates that
> > this patch is the culprit. I'm investigating, but if flagging it here in case 
> > someone else finds a fix faster than I do.
> 
> Yes, Marvin already sent a patch:

Yes, so I see, Sergio just pointed it out to me here too! I'll ack that one
for you.

/Bruce

> 	http://dpdk.org/dev/patchwork/patch/2049/
> 
> > The error is due to the libraries being missing on the link command, with the
> > out-of-the-box configuration i.e. individual static libs.
> 
> Sorry, I forgot to test this basic case after applying the patch.
> 
> -- 
> Thomas
  
Hiroshi Shimamoto Dec. 17, 2014, 11:07 a.m. UTC | #6
> Subject: Re: [dpdk-dev] [PATCH] mk: fix link to combined library
> 
> On Wed, Dec 17, 2014 at 11:43:51AM +0100, Thomas Monjalon wrote:
> > 2014-12-17 10:38, Bruce Richardson:
> > > On Wed, Dec 17, 2014 at 12:45:32AM +0100, Thomas Monjalon wrote:
> > > > 2014-12-11 02:54, Hiroshi Shimamoto:
> > > > > From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > > >
> > > > > The application should be linked to the single combined library in the
> > > > > condition that both of CONFIG_RTE_BUILD_COMBINE_LIB and
> > > > > CONFIG_RTE_BUILD_SHARED_LIB are enabled.
> > > > >
> > > > > The current makefile generates an application that links to each library.
> > > > > This patch fixes to link the single library.
> > > > >
> > > > > Before
> > > > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > > > 	linux-vdso.so.1 =>  (0x00007fff232a1000)
> > > > > 	librte_distributor.so => not found
> > > > > 	librte_kni.so => not found
> > > > > 	librte_ivshmem.so => not found
> > > > > 	librte_pipeline.so => not found
> > > > > 	librte_table.so => not found
> > > > > 	librte_port.so => not found
> > > > > 	librte_timer.so => not found
> > > > > 	librte_hash.so => not found
> > > > > 	librte_lpm.so => not found
> > > > > 	librte_power.so => not found
> > > > > 	librte_acl.so => not found
> > > > > 	librte_meter.so => not found
> > > > > 	librte_sched.so => not found
> > > > > 	libm.so.6 => /lib64/libm.so.6 (0x00007fc638020000)
> > > > > 	librt.so.1 => /lib64/librt.so.1 (0x00007fc637e18000)
> > > > > 	librte_kvargs.so => not found
> > > > > 	librte_mbuf.so => not found
> > > > > 	librte_ip_frag.so => not found
> > > > > 	libethdev.so => not found
> > > > > 	librte_malloc.so => not found
> > > > > 	librte_mempool.so => not found
> > > > > 	librte_ring.so => not found
> > > > > 	librte_eal.so => not found
> > > > > 	librte_cmdline.so => not found
> > > > > 	librte_cfgfile.so => not found
> > > > > 	librte_pmd_bond.so => not found
> > > > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc637bfe000)
> > > > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007fc6379fa000)
> > > > > 	libintel_dpdk.so => not found
> > > > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc6377dd000)
> > > > > 	libc.so.6 => /lib64/libc.so.6 (0x00007fc63741c000)
> > > > > 	/lib64/ld-linux-x86-64.so.2 (0x00007fc638330000)
> > > > >
> > > > > After
> > > > > $ ldd x86_64-ivshmem-linuxapp-gcc/app/test
> > > > > 	linux-vdso.so.1 =>  (0x00007fffb79fe000)
> > > > > 	librt.so.1 => /lib64/librt.so.1 (0x00007f0d8a971000)
> > > > > 	libm.so.6 => /lib64/libm.so.6 (0x00007f0d8a66f000)
> > > > > 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0d8a458000)
> > > > > 	libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d8a254000)
> > > > > 	libintel_dpdk.so => not found
> > > > > 	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0d8a037000)
> > > > > 	libc.so.6 => /lib64/libc.so.6 (0x00007f0d89c76000)
> > > > > 	/lib64/ld-linux-x86-64.so.2 (0x00007f0d8ab82000)
> > > > >
> > > > > Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> > > > > Reviewed-by: Hayato Momma <h-momma@ce.jp.nec.com>
> > > >
> > > > It is what I suggested to Sergio:
> > > > 	http://dpdk.org/ml/archives/dev/2014-December/009116.html
> > > >
> > > > Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> > > >
> > > > Applied
> > > >
> > > > Thanks
> > >
> > > None of the example apps are compiling for me today, and git bisect indicates that
> > > this patch is the culprit. I'm investigating, but if flagging it here in case
> > > someone else finds a fix faster than I do.
> >
> > Yes, Marvin already sent a patch:
> 
> Yes, so I see, Sergio just pointed it out to me here too! I'll ack that one
> for you.
> 
> /Bruce
> 
> > 	http://dpdk.org/dev/patchwork/patch/2049/
> >
> > > The error is due to the libraries being missing on the link command, with the
> > > out-of-the-box configuration i.e. individual static libs.
> >
> > Sorry, I forgot to test this basic case after applying the patch.

I'm sorry too, I never checked examples and various configuration with this patch.

thanks,
Hiroshi
  

Patch

diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 84ec4df..3782eab 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -61,6 +61,8 @@  ifeq ($(NO_AUTOLIBS),)
 
 LDLIBS += --whole-archive
 
+ifeq ($(RTE_BUILD_COMBINE_LIBS),n)
+
 ifeq ($(CONFIG_RTE_LIBRTE_DISTRIBUTOR),y)
 LDLIBS += -lrte_distributor
 endif
@@ -119,8 +121,12 @@  LDLIBS += -lm
 LDLIBS += -lrt
 endif
 
+endif # ! RTE_BUILD_COMBINE_LIBS
+
 LDLIBS += --start-group
 
+ifeq ($(RTE_BUILD_COMBINE_LIBS),n)
+
 ifeq ($(CONFIG_RTE_LIBRTE_KVARGS),y)
 LDLIBS += -lrte_kvargs
 endif
@@ -216,6 +222,8 @@  endif
 
 endif # plugins
 
+endif # ! RTE_BUILD_COMBINE_LIBS
+
 LDLIBS += $(EXECENV_LDLIBS)
 
 LDLIBS += --end-group