1 引言
dpdk20.11以及以后使用Pkg-Config维护它依赖库路径、头文件路径、编译选项、链接选项等信息,文件名后缀是.pc
,方便第三方开发者便捷地获取相关信息 按官网流程安装完dpdk后发现/usr/loca/lib64中包含pkgconfig文件夹内包含libdpdk.pc
2 基本使用
vim /etc/profile
export PKG_CONFIG_PATH=/usr/loca/lib64/pkgconfig/
source /etc/profile
可以通过Linux的PkgConfig
命令获取相关信息,如pkg-config --libs --cflags libdpdk
3 CMake中如何调用
CMake通过FindPkgConfig
模块来使用获取相关信息,比较经典的写法是:
set(ENV{PKG_CONFIG_PATH} /usr/local/lib64/pkgconfig/)
find_package(PkgConfig)
pkg_search_module(LIBDPDK REQUIRED libdpck)
后面就可以通过SEASTARPC_LIBRARIES
等方式获取相关编译选项和库名称等。
MESSAGE(STATUS ${LIBDPDK_LIBRARIES})
MESSAGE(STATUS ${LIBDPDK_INCLUDE_DIRS})
###输出如下
-- rte_noderte_graphrte_bpfrte_flow_classifyrte_pipelinerte_tablerte_portrte_fibrte_ipsecrte_vhostrte_stackrte_securityrte_schedrte_reorderrte_ribrte_regexdevrte_rawdevrte_pdumprte_powerrte_memberrte_lpmrte_latencystatsrte_knirte_jobstatsrte_ip_fragrte_gsorte_grorte_eventdevrte_efdrte_distributorrte_cryptodevrte_compressdevrte_cfgfilerte_bitratestatsrte_bbdevrte_aclrte_timerrte_hashrte_metricsrte_cmdlinerte_pcirte_ethdevrte_meterrte_netrte_mbufrte_mempoolrte_rcurte_ringrte_ealrte_telemetryrte_kvargs
-- /usr/local/include
具体有哪些可以使用,可以参看CMake的FindPkgConfig模块使用.
4 后续链接
# 使用以下共享链接
target_compile_options (test_dpdk PRIVATE ${LIBDPDK_CFLAGS} )
target_link_libraries (test_dpdk ${LIBDPDK_LDFLAGS} )
# 或使用以下静态链接
target_compile_options (test_dpdk PRIVATE ${LIBDPDK_STATIC_CFLAGS} )
target_link_libraries (test_dpdk ${LIBDPDK_STATIC_LDFLAGS} )