If you are using long file (more than 4Gb) support for C standart library (via defining _FILE_OFFSET_BITS 64 macro or something else) and lint shows you errors like this:
(88) warning: constant in conditional context argument unused in function (18) sig in sighandler value type declared inconsistently lseek llib-lc:unistd.h(396) long () :: unistd.h(396) long long () tell llib-lc:unistd.h(515) long () :: unistd.h(515) long long () ftello llib-lc:stdio.h(319) long () :: stdio.h(319) long long () function returns value which is always ignored fflush fprintf printf fwrite signal alarm lseek64 function argument ( number ) declared inconsistently ftruncate (arg 2) llib-lc:unistd.h(320) long :: unistd.h(320) long long lockf (arg 3) llib-lc:unistd.h(394) long :: unistd.h(394) long long lseek (arg 2) llib-lc:unistd.h(396) long :: unistd.h(396) long long pread (arg 4) llib-lc:unistd.h(410) long :: unistd.h(410) long long pwrite (arg 4) llib-lc:unistd.h(434) long :: unistd.h(434) long long truncate (arg 2) llib-lc:unistd.h(520) long :: unistd.h(520) long long fseeko (arg 2) llib-lc:stdio.h(318) long :: stdio.h(318) long long declared global, could be static min main.c(13) sighandler main.c(18) fp main.c(11)
...Don't panic! It's known bug:
The lint(1B) utility will generate spurious error messages when _FILE_OFFSET_BITS is set to 64. This is because the binary libc lint library, /usr/lib/llib-lc.ln, is compiled only for the standard interfaces, not with _FILE_OFFSET_BITS set to 64. This deficiency hampers static error-checking for programs compiled in the large file compilation environment. (Source)
Damn it, I lost 3 hours before I found it.
Если вы используете в своей программе поддержку больших файлов (больше 4 Гб) в стандартной библиотеке C (с помощью задания макроса _FILE_OFFSET_BITS 64 или как-то иначе) и lint выдает вам ошибки вроде этих:
(88) warning: constant in conditional context argument unused in function (18) sig in sighandler value type declared inconsistently lseek llib-lc:unistd.h(396) long () :: unistd.h(396) long long () tell llib-lc:unistd.h(515) long () :: unistd.h(515) long long () ftello llib-lc:stdio.h(319) long () :: stdio.h(319) long long () function returns value which is always ignored fflush fprintf printf fwrite signal alarm lseek64 function argument ( number ) declared inconsistently ftruncate (arg 2) llib-lc:unistd.h(320) long :: unistd.h(320) long long lockf (arg 3) llib-lc:unistd.h(394) long :: unistd.h(394) long long lseek (arg 2) llib-lc:unistd.h(396) long :: unistd.h(396) long long pread (arg 4) llib-lc:unistd.h(410) long :: unistd.h(410) long long pwrite (arg 4) llib-lc:unistd.h(434) long :: unistd.h(434) long long truncate (arg 2) llib-lc:unistd.h(520) long :: unistd.h(520) long long fseeko (arg 2) llib-lc:stdio.h(318) long :: stdio.h(318) long long declared global, could be static min main.c(13) sighandler main.c(18) fp main.c(11)
...Не пугайтесь! Это известный баг:
The lint(1B) utility will generate spurious error messages when _FILE_OFFSET_BITS is set to 64. This is because the binary libc lint library, /usr/lib/llib-lc.ln, is compiled only for the standard interfaces, not with _FILE_OFFSET_BITS set to 64. This deficiency hampers static error-checking for programs compiled in the large file compilation environment. (Источник)
Этот пост посвящается таким же несчастным, как я, которые пытаются нагуглить, как поправить эти ошибки. Мне понадобилось чуть больше 3х часов, чтобы найти эту маленькую заметочку. В моем случае это был вопрос "на засыпку" - не ответил бы, не приняли бы лабу. Черт возьми, самое обидное, что к самой лабе это не имеет отношения, чисто повозить мордой об стол.
Интересности... а ежели под 64 бита либу скомпилить? Или я неверно понял суть проблемы?
В принципе это решило бы проблему, но в стандартном пакете lint этого нет, а самому это делать довольно хлопотно. Кроме того, всяких вариантов компиляции стандартной библиотеки - сотни и все их не соберешь. Так что это довольно предсказуемо, но обидно.
Теперь благодаря Вам этих несчастных поубавиться)))
Отправить комментарий