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 目标,请按照以下步骤操作:
- 执行
find /usr/include/ -name types.h
为本地构建识别正确的文件(这是因为当前的cflags有-march=native)
- 将 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。
我安装了 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 目标,请按照以下步骤操作:
- 执行
find /usr/include/ -name types.h
为本地构建识别正确的文件(这是因为当前的cflags有-march=native) - 将 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。