Поскольку GNU libc
реализует open()
и open64()
, как вы и ожидаете (то есть это просто динамически связанные символы, которые вы можете подключить с помощью LD_PRELOAD
), но делает что-то особенное с stat()
и stat64()
.
Если вы посмотрите на символы, экспортированные с помощью libc
(например, с nm -D /libc/libc.so.6
), вы увидите, что на самом деле они не предоставляют символы stat
или stat64
!
Обращения к этим функциям упакованы - либо во время компиляции (если возможно) встроенными функциями в <sys/stat.h>
, либо (если это не так) статически связанными определениями, предоставленными libc_nonshared.a
.
Фактические динамически связанные функции, которые вызываются: __xstat()
или __xstat64()
; и они принимают дополнительный первый аргумент, целое число, которое является номером версии, указывающим расположение struct stat
, которое ожидается вызывающей стороной. Попробуйте подключить их вместо этого.
(Смысл всего этого в том, чтобы позволить динамически связанному libc
поддерживать двоичные файлы, которые используют различные несовместимые макеты struct stat
и определения битов в mode_t
; если вы посмотрите в /usr/include/sys/stat.h
, вы найдете комментарий к этому эффекту. fstat()
, fstat64()
, lstat()
, lstat64()
и mknod()
также затрагиваются таким же образом.)