Подробнее о том, что означает REDIRECT_NTH
: макрос генерирует объявление функции, которое указывает компилятору использовать определенный символ для функции в выводе ELF компилятора.По умолчанию компилятор использует символ ELF "lseek
" для функции C с именем "lseek
" (или, в некоторых системах, "_lseek
").Этот макрос расширяется до кода, который говорит компилятору использовать символ «lseek64».Таким образом, в коде C есть функция с именем «lseek
», но когда вы смотрите в объектном коде (например, с помощью программы «nm»), вы видите «lseek64
».
Цель этогочто функция действительно lseek64 на двоичном уровне - она работает с 64-битными смещениями файлов.Но исходный код объявил, что хочет назвать его lseek
по причинам обратной совместимости (это то, что говорит _FILE_OFFSET_BITS=64
).
Если исходная программа хочет вызвать lseek64
с таким именем,и lseek
относится к старой 32-битной версии, оно должно определять _LARGEFILE64_SOURCE
, а не _FILE_OFFSET_BITS=64
.
Кстати, "NTH" в "REDIRECT_NTH
" относится к "нет броска", "который является атрибутом объявления функции, которую генерирует макрос.