-1

我正在将一些非常老的(和大量的)代码从 CentOS 6 移植到 Ubuntu 14.04。注意,我已经安装了预期的旧版本 gcc、固定的链接器引用等。

我的构建尝试正在进行中,但我被困在一件事上。有一个 C 文件试图创建 type 的结构rusage,但是 Ubuntu 环境给了我以下错误:error: storage size of 'rusage' isn't known

据我所知,我所有的路径看起来都是正确的。我什至查看了每个系统上的 time.h 和 resource.h 系统文件(它可以工作的 CentOS 和不工作的 Ubuntu)。似乎有对实际定义 rusage 的 wait.h 文件的引用,只是一样。

我的 Ubuntu 环境中还可能缺少什么?

编辑:添加更多 MCVE-ish 细节...

我的构建因以下错误而停止:

vmodem.c:6747: error: storage size of 'rusage' isn't known

文件中的那一行很简单:

struct rusage rusage

所需的包含也都在该文件中(<sys/time.h>,<sys/wait.h>等)

不知道在这种情况下我还能提供什么...

4

2 回答 2

2

CentOS 6 和 Ubuntu 14.04的手册页getrusage都说应该包含<sys/time.h><sys/resource.h>.

你提到你包括<sys/wait.h>. 它有一个前向声明struct rusage;,因此 和 的声明wait3wait4是有效的,但该前向声明不足以让您声明一个 struct 类型rusage

事情在 CentOS 6 上有效,因为 CentOS 6wait.h包含一行#include <sys/resource.h>,并且resource.h完全声明struct rusage,但 Ubuntu 14.04wait.h不包含#include <sys/resource.h>一行。

于 2015-12-29T19:46:25.830 回答
0

感谢 coredump 和 Eugene Sh。对于提示...添加#include <sys/resource.h>是诀窍。

它一定是在 CentOS 中有效,但在 Ubuntu 中无效。无论如何,简单地包含资源头文件不应该有任何伤害。

于 2015-12-29T19:32:18.043 回答