spdk dpdk编译动态库( shared library )

Posted CobbLiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spdk dpdk编译动态库( shared library )相关的知识,希望对你有一定的参考价值。

1,dpdk编译共享库

默认情况下都编译出静态库,如果想编译出动态库,把config/common_base文件中的CONFIG_RTE_BUILD_SHARED_LIB改成y即可。

 

2,spdk编译共享库

修改mk/spdk.common.mk:

# Archive $(OBJS) into [email protected] (.so)

# Archive $(OBJS) into [email protected] (.a)

# LIB_C=\

#       $(Q)echo "  LIB $(notdir [email protected])"; \

#       rm -f [email protected]; \

#       ar crDs [email protected] $(OBJS)

LIB_C=\

        gcc -shared -Wl,-soname,$(notdir [email protected]) -o [email protected] $(OBJS); \

        ln -s $(notdir [email protected]) [email protected]

// …

# define spdk_lib_list_to_files

#       $(1:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.a)

# endef

define spdk_lib_list_to_files

        $(1:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.so)

endef

// notdir将绝对路径中的路径名去掉,不然编译后的sonar是绝对路径,应用程序使用它的时候无法编译通过。改命令相关的manual见这里https://www.gnu.org/software/make/manual/html_node/File-Name-Functions.html#File-Name-Functions

修改Makefile,只编译library库,其他example和test等库不要编译:

#DIRS-y += lib test examples app

DIRS-y += lib

如果在编译链接的时候,发现某个函数所在的library分明在library列表中,却依然报错说undefined reference to `rte_eal_device_remove’。需要更改dpdk的导出符号配置文件,将这个符号加入到导出符号列表中。这个文件往往是*.map,如librte_eal/linuxapp/eal/rte_eal_version.map

导出符号的文档见这里:https://www.gnu.org/software/gnulib/manual/html_node/LD-Version-Scripts.html#LD-Version-Scripts

 

注:本文所有内容基于spdk16.11和dpdk16.11

以上是关于spdk dpdk编译动态库( shared library )的主要内容,如果未能解决你的问题,请参考以下文章

DPDK vhost库

Linux动态库多重依赖,编译问题!!!!!!

动态库编译详解

linux 编译动态链接库

linux 编译动态链接库

g++ 编译动态链接库和静态链接库