Ошибка с Ubuntu
Я портирую какой-то действительно старый (и обширную базу) код из CentOS 6 в Ubuntu 14.04. Обратите внимание, я установил ожидаемую старую версию gcc, исправил ссылки на ссылки и т. Д.
Моя попытка сборки прогрессирует, но я застрял на одном. Там есть файл C, который пытается создать структуру типа rusage
, но среда Ubuntu выдает мне следующую ошибку: error: storage size of 'rusage' isn't known
Насколько я могу судить, все мои пути выглядят правильно. Я даже посмотрел системные файлы time.h и resource.h в каждой системе (CentOS, где он работает, и Ubuntu, где он не работает). Похоже, что есть ссылки на файл wait.h, где фактически определяется rusage.
Что еще я мог упустить в своей среде Ubuntu?
Редактировать: Добавление более подробной информации о MCVE...
Моя сборка останавливается со следующей ошибкой:
vmodem.c:6747: error: storage size of 'rusage' isn't known
Эта строка в файле просто:
struct rusage rusage
Все необходимые включения также находятся в этом файле (<sys/time.h>
, <sys/wait.h>
, так далее.)
Не уверен, что еще я могу предоставить в этом случае...
2 ответа
Справочная страница для getrusage
на CentOS 6 и Ubuntu 14.04 говорится, что <sys/time.h>
а также <sys/resource.h>
,
Вы упомянули, что вы включаете <sys/wait.h>
, Имеет предварительную декларацию struct rusage;
так что декларации wait3
а также wait4
будет действительным, но этого прямого объявления недостаточно, чтобы позволить вам объявить структуру типа rusage
,
Вещи работают на CentOS 6, потому что CentOS 6 wait.h
содержит строку #include <sys/resource.h>
, а также resource.h
полностью заявляет struct rusage
, но Ubuntu 14.04 wait.h
не содержит #include <sys/resource.h>
линия.
Благодаря coredump и Евгению Ш. за советы... добавление #include <sys/resource.h>
был трюк.
Должно быть, это было то, что работало в CentOS, но не в Ubuntu. В любом случае, простое включение файла заголовка ресурса не должно повредить ничего.