st_mtimensec недоступен в struct stat

Я пытаюсь скомпилировать Evas для хоста mipsel-linux-uclibc. Для этого я использую старый бинарный набор инструментов от моей компании. Он был скомпилирован примерно в 2008 году, и я как бы застрял с ним прямо сейчас. Похоже, что в этой цепочке инструментов отсутствует следующее поле в структуре stat файла stat.h:

unsigned long int st_mtimensec; /* Nsecs of last modification.  */

Самое близкое, что у меня есть:

__time_t st_mtime;      /* Time of last modification.  */

Похоже, это связано с uclibc. Есть ли простой выход из этого?


person ivarec    schedule 28.01.2013    source источник
comment
Может быть, uclibc не думает, что может обеспечить лучшее разрешение, чем 1 секунда? Изменить: я только что загрузил последнюю версию uclibc, и это поле есть. Какую версию ты используешь? Вы должны иметь возможность связываться со своим собственным uclibc независимо от того, какой набор инструментов вы используете.   -  person Carl Norum    schedule 28.01.2013


Ответы (1)


struct stat должен содержать элемент struct timespec st_mtim;, а stat.h должен быть #define st_mtime st.mtim.tv_sec. Если ваш uClibc слишком стар, чтобы иметь это право, вы можете попробовать взломать их в заголовке (вероятно, там есть только элемент time_t st_mtime; и элемент заполнения рядом с ним, где должны быть наносекунды). Важно то, что вы должны сохранять расположение членов (их смещения в структуре) одинаковыми, иначе все ужасно сломается.

Лучше спросить, почему Evas не переносим на более старые (до POSIX-2008) системы и почему он использует неправильное имя для поля наносекунд (правильное имя — st_mtim.tv_nsec, а не st_mtimensec). вероятно, нужно получить эти исправления в Evas, чтобы другие пользователи не столкнулись с проблемами в будущем.

person R.. GitHub STOP HELPING ICE    schedule 28.01.2013