【发布时间】:2021-07-27 01:08:42
【问题描述】:
我安装了 DPDK,我正在尝试用它编译代码。这在我的 WSL 机器上有效,但是在测试服务器上,使用相同的 dpdk 安装,我收到错误:
/usr/local/include/rte_mempool.h: error: unknown type name 'ssize_t'
我注意到这个头文件不包括 /sys/types.h,但它也不包括在它工作的机器上。我不知道它应该来自哪里,但它来自某个地方。
如何让这些标头了解 ssize_t?
如comment 中所述:
编译器选项包括-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不兼容。
【问题讨论】:
-
ssize_t在sys/types.h中定义,通常由#include <unistd.h>自动引入 -
你使用什么编译选项(包使用)?您可能需要通过适当的
#define(例如命令行选项中的#define _XOPEN_SOURCE 700或-D_XOPEN_SOURCE=700)主动请求POSIX 数据类型,例如ssize_t。 -
@JonathanLeffler
-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不兼容 -
-std=c99选项会抑制 POSIX 功能,除非您添加-D_XOPEN_SOURCE=700或等效项 - 这解释了您现在遇到问题的原因(但不能解释为什么它在其他地方工作)。使用-std=gnu99获取定义,无需指定_XOPEN_SOURCE。 -
另见GCC with
-std=c99complains about not knowingstruct timespec。这个问题实际上是那个问题的副本——类型名称不同,但问题的原因是相同的。如果您将编译器选项放入问题中会很有帮助,以便稍后出现的人更清楚导致问题的原因。