欢迎来到 DPDK交流社区 ,有什么问题可以尽管在这里提问,您将会收到社区其他成员的回答;也可以将您的总结写在这里,为社区其他成员提供帮助。 (QQ交流群:127163755)

新手求教如何修改Makefile为DPDK程序链接第三方库

0 投票
大家好,我最近开始学习dpdk,也试着写了一些程序;现在有这样的需求:

目前网卡接收到的数据内容需要送GPU进行处理,意味着我需要在DPDK编写的程序中添加CUDA的代码;

我的想法是把CUDA的代码部分编译成.a的静态库,然后链接至dpdk程序中,现在cuda的代码已经写好并编译成.a的文件,就是不清楚如何修改原Makefile文件使得我的cuda.a能链接进去

还请高手不吝赐教,用helloworld的Makefile文件简单举一下例子就可以。非常感谢~
最新提问 5月 7, 2017 分类:DPDK初学入门 | 用户: qtj1215 (160 分)

1个回答

+2 投票
 
已采纳

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]# 

最新回答 5月 8, 2017 用户: qingnan (540 分)
采纳于 5月 9, 2017 用户:qtj1215
好的好的,正是我需要的,非常感谢您。最后再麻烦多问一句,DPDK链接.so的动态库是不是也可以这样操作呢
...