转自: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]#