ssize_t 在 dpdk 中未定义 header

ssize_t undefined in a dpdk header

我安装了 DPDK,我正在尝试用它编译代码。这在我的 WSL 机器上有效,但是在测试服务器上,使用相同的 dpdk 安装,我收到错误:

/usr/local/include/rte_mempool.h: error: unknown type name 'ssize_t'

我注意到这个 header 不包括 /sys/types.h,但它也不包括在它运行的机器上。我不知道它应该来自哪里,但它来自某个地方。

如何让这些 header 知道 ssize_t?


中所述:

编译器选项包括 -std=c99 -O3 -march=native -I/usr/local/include -include rte_config.h 和一大堆 -l 选项(dpdk 的 make 结构添加了这些)。这提示我 运行 gcc --version,工作的是 Ubuntu gcc 9.3.0,坏的是 gcc 5.4.0。看起来可能是 dpdk 和安装的 gcc 不兼容。

正如@JonathanLeffier 在评论中提到的,问题的根本原因包括 sys/types.h 当gcc 选项 --std=c99 已通过。在不修改 DPDK 或示例代码的情况下,最简单的修复方法是 types.h 的路径作为 cflags.[=16= 的一部分包含在内]

如果本机构建适用于 x86_64 目标,请按照以下步骤操作:

  1. 执行find /usr/include/ -name types.h为本地构建识别正确的文件(这是因为当前的cflags有-march=native)
  2. 将 CFLAGS 从 -std=c99 -O3 -march=native -I/usr/local/include -include rte_config.h 修改为 -std=c99 -O3 -march=native -I/usr/local/include -include rte_config.h --include=/usr/include/[target-machine]/sys/types.h

注意:根据我的拙见,请使用 pkg-config 为共享和静态二进制文件填充正确的 CFLAGS 和 LDFLAGS。