конфликтующие типы для '__readlink' во время make glibc 2.14 - PullRequest
1 голос
/ 05 октября 2019

Я сделал обновление программного обеспечения на программном обеспечении для моделирования, которому нужна более новая версия glibc. Поэтому я хотел установить glibc версии 2.14 на новый префикс.

Согласно Как обновить glibc с версии 2.12 до 2.14 на CentOS? Я пытался установить его на sles11sp3

mkdir /var/mpi/Libraries/glibc_install; cd /var/mpi/Libraries/glibc_install
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
tar zxvf glibc-2.14.tar.gz
cd glibc-2.14
mkdir build
cd build
../configure --prefix=/var/mpi/Libraries/glibc-2.14
make -j4

Во время сборки получаю следующееошибка:

readlink.c:26: error: conflicting types for ‘__readlink’
../include/unistd.h:120: error: previous declaration of ‘__readlink’ was here
make[2]: *** [/var/mpi/Libraries/glibc_install/glibc-2.14/build/io/readlink.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory `/var/mpi/Libraries/glibc_install/glibc-2.14/io'
make[1]: *** [io/subdir_lib] Error 2
make[1]: Leaving directory `/var/mpi/Libraries/glibc_install/glibc-2.14'
make: *** [all] Error 2

У вас есть подсказка, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

GLIBC: 2.14 → 2011-06-01. «Версия с исправлением» 2.14.1 → 2011-10-07 https://ftp.gnu.org/gnu/glibc/

Примечание: make -j4 не рекомендуется для glibc, насколько я помню.

Мои тесты (старыеSLE11 SP2): SLE 11 SP2 gcc 4.3.2 слишком стар для glibc-2.14.1, может быть, незначительное обновление gcc SP3 (до 4.3.4) также слишком старое?

Использование "extraEL 6 gcc-4.9.3 ".... для glibc-2.14.1:

cd build-glibc214/     # the recommended build directory outside the glibc source
export CC=gcc49 CXX=g++49 && ../glibc-2.14.1/configure --prefix=/opt/glibc214
make             # no errors
# make install   # OK

Дополнительные gcc´s: как установить gcc 4.9.2 на RHEL 7.4

0 голосов
/ 05 октября 2019

io/readlink.c - это просто реализация заглушки, которая всегда дает сбой во время выполнения. Он не должен компилироваться вообще при сборке для GNU / Linux. Вместо этого реализация должна исходить из универсальной оболочки системных вызовов в sysdeps/unix/syscalls.list:

readlink     -       readlink        i:spi   __readlink      readlink

Однако, последние архитектуры Linux (такие как generic на языке Linux, в настоящее время aarch64, csky, nios2 и riscv)) больше не имеют системного вызова readlink и функции, которая должна быть реализована с использованием readlinkat. Эта реализация находится в файле sysdeps/unix/sysv/linux/generic/readlink.c.

Не ясно, что вы делаете, поэтому скомпилирован неверный файл. Вы уверены, что установили совместимые заголовки ядра?

Конкретный восходящий коммит (который вошел в glibc 2.15):

commit 95b7042bac3e2cfc6fef7aec6acc7d46dd50eba5
Author: Roland McGrath <roland@hack.frob.com>
Date:   Fri Nov 11 10:02:42 2011 -0800

    Fix __readlink declaration.

Но, учитывая фундаментальную природуПроблема со сборкой, с которой вы столкнулись, я сомневаюсь, что применение этого патча при устранении немедленного сбоя сборки в итоге даст вам функциональную сборку glibc.

...