Skip to content

编译连接时有可能选取错误的dpdk lib路径 #1010

@lxchx

Description

@lxchx

./src/Makefile的规则中,如果pkg-config找到了libssl库,就会在编译时连接libssl库。在我的编译环境下,LIBS会追加-L/usr/lib64 -lssl -ldl -lz -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto -lcrypto -ldl -lz。然后再通过include $(SRCDIR)/dpdk.mk连接dpdk库。

在最后编译连接dpvs时,由于-L/usr/lib64在dpdk lib追加的参数之前,会导致dpdk的libs也会优先选择/usr/lib64下的文件,而不是随后指定的特定dpdklib路径,当那个路径安装了dpdklib时就连接了错误的dpdk静态库。

一个比较简单的修复方法就是在Makefile中调换引入libssl和dpdklib的顺序。

diff --git a/src/Makefile b/src/Makefile
index 62d8cbb..e43f26d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -37,14 +37,14 @@ SRCDIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
 # Addtional libs below are needed when using dynamic link.
 LIBS += -lpthread -lnuma -lrt -lm -ldl -lcrypto
 
+include $(SRCDIR)/config.mk
+include $(SRCDIR)/dpdk.mk
+
 ifeq ($(shell pkg-config --exists libssl && echo 0),0)
 CFLAGS += $(shell pkg-config --cflags libssl)
 LIBS += $(shell pkg-config --static --libs libssl)
 endif
 
-include $(SRCDIR)/config.mk
-include $(SRCDIR)/dpdk.mk
-
 INCDIRS += -I $(SRCDIR)/../include
 
 # for dpvs main program.

不过注意到引入libssl的commit是 3994ca9 ,我手头没有合适的环境,不知道这个修复会不会破坏该commit所说的环境的编译兼容性。或者pkg-config的使用上有没有更好的实践可以避免这个问题?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions