Компиляция Perl как 64-разрядных на Solaris 10 Sparc - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь скомпилировать perl 5.22.2 на Solaris, sparc, как 64 бит (ОС 64 бит).Он скомпилирован и отлично связан как 32-битный двоичный файл, теперь я добавил флаг -m64 к CFLAGS и LDFLAGS, и я получаю следующую ошибку:

...skipping...
perlio.c:3400: error: structure has no member named `_ptr'
perlio.c:3408: error: structure has no member named `_ptr'
perlio.c: In function `PerlIOStdio_get_base':
perlio.c:3531: error: structure has no member named `_base'
perlio.c: In function `PerlIOStdio_get_bufsiz':
perlio.c:3538: error: structure has no member named `_cnt'
perlio.c:3538: error: structure has no member named `_ptr'
perlio.c:3538: error: structure has no member named `_base'
perlio.c: In function `PerlIOStdio_get_ptr':
perlio.c:3547: error: structure has no member named `_ptr'
perlio.c: In function `PerlIOStdio_get_cnt':
perlio.c:3554: error: structure has no member named `_cnt'
perlio.c: In function `PerlIOStdio_set_ptrcnt':
perlio.c:3575: error: structure has no member named `_ptr'
perlio.c:3594: error: structure has no member named `_cnt'
make: *** [perlio.o] Error 1

Для справки, яизвлекли упомянутые строки из perlio.c:

3400:   STDCHAR *eptr = (STDCHAR*)PerlSIO_get_ptr(s);
3408:       if ((STDCHAR*)PerlSIO_get_ptr(s) != --eptr || ((*eptr & 0xFF) != ch)) {
3531:    return (STDCHAR*)PerlSIO_get_base(stdio);
3538:    return PerlSIO_get_bufsiz(stdio);
3547:    return (STDCHAR*)PerlSIO_get_ptr(stdio);
3554:    return PerlSIO_get_cnt(stdio);
3575:   PerlSIO_set_ptr(stdio, ptr); /* LHS STDCHAR* cast non-portable */
3594:    PerlSIO_set_cnt(stdio, cnt);

Похоже, что он делает что-то странное с источником, обратите внимание, как _ptr рассматривается как отдельная сущность, тогда как функция называется PerlSIO_get_ptr,Похоже, его отключили.

Кто-нибудь знает, что здесь происходит?К вашему сведению, использовать что-то вроде perlbrew не вариант, мне нужно скомпилировать это самостоятельно: (.

1 Ответ

0 голосов
/ 26 апреля 2018

Оказывается, мне нужно было добавить флаг -Duse64bitall в скрипт Configure.Итак, наконец я смог собрать с

export CFLAGS=-m64 # not sure if really nessessary - just what I did
./Configure -Duse64bitall -Dcc=gcc -d
make

. Для моей установки мне нужно еще несколько библиотек, так что это довольно упрощенная версия.Однако это решило проблему, описанную в этом посте.

...