修改Makefile为DPDK程序链接第三方库

转自:http://www.sysight.com/index.php?qa=505&qa_1=%E6%96%B0%E6%89%8B%E6%B1%82%E6%95%99%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9makefile%E4%B8%BAdpdk%E7%A8%8B%E5%BA%8F%E9%93%BE%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93

DPDK Makefile工程链接库文件的名为rte.app.mk,相对路径为mk/rte.app.mk,添加第三方库的方法非常简单,步骤如下:

示例:添加一个名为just_test.a的第三方库

步骤一:

 #
 57 # Order is important: from higher level to lower level
 58 #
 59 _LDLIBS-y += --whole-archive
 60 
 61 _LDLIBS-$(CONFIG_RTE_BUILD_COMBINE_LIBS)    += -l$(RTE_LIBNAME)
 62 #Ext lib hyperscan
 63 _LDLIBS-$(CONFIG_RTE_LIBRTE_FFWD)           += -lhs
 64 _LDLIBS-$(CONFIG_RTE_LIBRTE_FFWD)           += -lstdc++
 65 _LDLIBS-$(CONFIG_RTE_LIBRTE_FFWD)           += -lm
 66 _LDLIBS-$(CONFIG_RTE_LIBRTE_FFWD)           += -lredisclient
 67 _LDLIBS-$(CONFIG_RTE_LIBRTE_FFWD)           += -lhiredis
 68 _LDLIBS-$(CONFIG_RTE_LIBRTE_ZLIB)           += -lz
 69 _LDLIBS-$(CONFIG_RTE_LIBRTE_ZLIB)           += -lrte_zlib
 70 _LDLIBS-$(CONFIG_RTE_LIBRTE_HTTP_PARSER)    += -lrte_http_parser
 71 _LDLIBS-$(CONFIG_RTE_LIBRTE_JUST_TEST)      += -ljust_test

注:此种添加方式需要再config/common_linuxapp中添加一个条目

539 #compile the user 
540 #
541 CONFIG_RTE_LIBRTE_USER=y
542 CONFIG_RTE_LIBRTE_HTTP_PARSER=y
543 CONFIG_RTE_LIBRTE_FFWD=y
544 CONFIG_RTE_LIBRTE_ZLIB=y
545 CONFIG_RTE_ATTACH=n
546 CONFIG_RTE_LOG_LEVEL_ERR=y
547 CONFIG_RTE_LIBRTE_JUST_TEST=y

或者在mk/rte.app.mk中写死

71 _LDLIBS-y                                   += -ljust_test

步骤二

第三方库的目录需要包含在PATH路径中,如/usr/lib/或者/lib/,头文件也是一样。

测试

写个简单的Hello程序,编译成.a文件,然后用hello_world例子测试。

hello代码

 4 void print_hello(void)
  5 {
     
  6     printf("%s: Hello,DPDK!\n",__FUNCTION__);
  7 }

在DPDK hello_world里调用

 48 
 49 static int
 50 lcore_hello(__attribute__((unused)) void *arg)
 51 {
     
 52     unsigned lcore_id;
 53     lcore_id = rte_lcore_id();
 54     printf("hello from core %u\n", lcore_id);
 55     return 0;
 56 }
 57 
 58 int
 59 main(int argc, char **argv)
 60 {
     
 61     print_hello();
 62     
 63     int ret; 
 64     unsigned lcore_id;
 65

     .....

   }

输出

[root@localhost helloworld]# ./build/helloworld 
print_hello: Hello,DPDK!
hello from core 1
hello from core 2
hello from core 3
hello from core 0
[root@localhost helloworld]# 

你可能感兴趣的:(工作遇到的问题)