zoukankan      html  css  js  c++  java
  • spdk 编译动态库( spdk compiles shared library )

    1,dpdk编译共享库

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

     

    2,spdk编译共享库

    修改mk/spdk.common.mk:

    # Archive $(OBJS) into $@ (.so)

    # Archive $(OBJS) into $@ (.a)

    # LIB_C=

    #       $(Q)echo "  LIB $(notdir $@)";

    #       rm -f $@;

    #       ar crDs $@ $(OBJS)

    LIB_C=

            gcc -shared -Wl,-soname,$(notdir $@.1) -o $@.1 $(OBJS);

            ln -s $(notdir $@.1) $@

    // …

    # 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

  • 相关阅读:
    getopt for windows
    开源代码学习之Tinyhttpd
    GCC 中的编译器堆栈保护技术
    读《程序员的思维修炼》有感
    main之前初始化流程
    平均速度
    显示图案
    圆的面积和周长
    C#(Winform) Http 发送数据
    Android BaseAdapter的使用
  • 原文地址:https://www.cnblogs.com/cobbliu/p/6759074.html
Copyright © 2011-2022 走看看