lint, large file, _FILE_OFFSET_BITS 64, problem, solaris, llib-lc

Achtung!

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х часов, чтобы найти эту маленькую заметочку. В моем случае это был вопрос "на засыпку" - не ответил бы, не приняли бы лабу. Черт возьми, самое обидное, что к самой лабе это не имеет отношения, чисто повозить мордой об стол.

 Imperia - Mirror



Trackback URL for this post:

/trackback/385
Просто Бомжик вт, 30/03/2020 - 08:58

Интересности... а ежели под 64 бита либу скомпилить? Или я неверно понял суть проблемы?

Alek$ вт, 30/03/2020 - 20:48

В принципе это решило бы проблему, но в стандартном пакете lint этого нет, а самому это делать довольно хлопотно. Кроме того, всяких вариантов компиляции стандартной библиотеки - сотни и все их не соберешь. Так что это довольно предсказуемо, но обидно.

Гость вт, 13/04/2020 - 05:47

Теперь благодаря Вам этих несчастных поубавиться)))



Отправить комментарий

CAPTCHA
Вы точно не бот?
13 + 1 =
Without JavaScript you won't pass captcha test, sorry. Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.