Моей первоначальной задачей было установить мод _perl 2.0.6 + Apache 2.2.22.
Процесс остановился с большим количеством ошибок, связанных с off64_t
при компиляции мода _perl. Итак, я начал копать глубже. Во-первых, я установил два новых экземпляра Perl 5.8.9 (, потому что мне придется использовать эту версию ):многопоточную версию и не -многопоточную версию (, они идентичны, только usethreads
отличается ). Попытка воспроизвести то же самое с использованием многопоточного Perl завершилась успешно и вообще без ошибок off64_t
.
Вывод очевиден :многопоточный Perl обеспечивает необходимое off64_t
, а не -не поточный Perl — нет.
Продолжая поиск, я сравнилconfig.h
(сcore/<arch>/CORE
)обоих Perl'ов, и в строке 3671 я вижу это (в Perl без -многопоточности):
/* HAS_OFF64_T:
* This symbol will be defined if the C compiler supports off64_t.
*/
/*#define HAS_OFF64_T / **/
и в потоках -включенных Perl:
#define HAS_OFF64_T /**/
perl -V
для обоих экземпляров Perl сообщает ccflags ='... -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64...'
как используемые флаги компилятора.
Насколько я понимаю, off64_t
используется для больших файлов и не имеет отношения к потокам. Я нашел эту информацию о off_t
и off64_t
:
. Если исходник скомпилирован с
_FILE_OFFSET_BITS = 64
, этот тип (, т.е.off_t
), прозрачно заменяется наoff64_t
.
Коротко:Есть 2 идентичные сборки Perl с единственным отличием :в параметре конфигурации usethreads
. Threaded Perl включает off64_t
, а не -— нет.
Мой вопрос::Почему это происходит и как потоки связаны с этим off64_t
типом данных, который следует использовать для больших файлов, а не для потоков ?
Информация :Arch Linux OS 32 -бит (ядро 2.6.33 ), gcc 4.5.0, libc 2.11.1,стандартный Perl 5.8.9
Notes:off64_t
обрабатывается в Configure
в строке 15526, генерируется простой try.c
и пытается скомпилироваться. Вопрос в том, почему не -многопоточный Perl не может его скомпилировать, а многопоточный Perl может.