【问题标题】:Ubuntu rusage error [closed]Ubuntu使用错误[关闭]
【发布时间】:2015-12-29 19:03:13
【问题描述】:

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

我的构建尝试正在进行中,但我被困在一件事上。有一个 C 文件试图创建 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> 等)

不确定在这种情况下我还能提供什么...

【问题讨论】:

  • 代替这些几乎不相关的信息,提供一些代码以及如何得到错误。
  • @EugeneSh。 ~我愿意分享相关代码,但代码库庞大且非常复杂,发布任何有意义的部分都会导致信息过载。如果问题出在我的代码库中,那么我会尝试自己处理。我正在寻找的是 Ubuntu 中任何已知的使用问题......尤其是与 RHEL 相关的问题。或者遇到类似情况的任何人。等等。
  • 要么有错字,要么不包括 sys/resource.h(sys/time.h 应该也可以)?显示代码。
  • @csr19us,只需创建一个 MVCE - stackoverflow.com/help/mcve 无论如何你都需要它来测试。
  • 问题出在代码中。当您尝试声明或分配或只是 sizeof 不完整类型的变量(在您的情况下为 rusage)时,就会发生这种情况。

标签: c linux ubuntu build rusage


【解决方案1】:

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

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

在 CentOS 6 上可以正常工作,因为 CentOS 6 的 wait.h 包含一行 #include <sys/resource.h>,而 resource.h 确实完全声明了 struct rusage,但 Ubuntu 14.04 的 wait.h 不包含 #include <sys/resource.h> 行。

【讨论】:

  • 这完美地解释了差异。非常感谢您宝贵的时间和投入。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2013-05-24
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多