Проблемы с связью при запуске GLIBC 'make check' - PullRequest
0 голосов
/ 30 января 2020

В настоящее время я пытаюсь скомпилировать glib c -2.30 в системе linux 3.10.0-1062.9.1.el7.x86_64, поскольку в настоящее время она работает 2.17.
Среда компиляции состоит из следующих которые были загружены через spack:
-binutils-2.33.1% gcc@9.2
-gcc@9.2 + piclibs binutils = binutils-2.33
-gmake@4.2.1
-libcap-2.25
- linux -headers-4.9.10 (dir упоминается ниже как $ kern_headers)
-libgd-2.2.4
Все необходимые зависимости для вышеупомянутого также были загружены и установлены с помощью spack.

Я клонировал glib c в $ HOME / lib / glib c и извлек glib c -2.30 репо.
Из $ HOME / lib / glibc_build я запускаю следующую конфигурацию чтобы обеспечить правильное использование вышеуказанных пакетов:

../glibc/configure --prefix=$HOME/lib/gnu/glibc_v2 CC="$gcc_bin/gcc -m64" --with-headers=$kern_headers CFLAGS=" -O3" CXXFLAGS=" -O3 -std=c++17" --with-binutils=$binutils_base/bin

Далее следуют:

make -j40

, который компилируется без проблем. Однако, когда я запускаю

make check

, я в конечном итоге получаю несколько экземпляров следующей ошибки:

Несоответствие обнаружено ld.so: get-dynamici c -info.h : 147:
elf_get_dynamic_info: Утверждение `info [DT_RPATH] == NULL 'не удалось!

В качестве проверки работоспособности я запускаю ldd на одном из выходных исполняемых файлов локали, который дает:

linux -vdso.so.1 => (0x00007fffc4123000)
lib c .so.6 => /lib64/libc.so.6 (0x00002b9080d40000)
$ HOME $ / lib / gnu / glibc_v2 / lib / ld- linux -x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00002b9080b1c000)

Что не имеет смысла для меня, так как он все еще использует старый линкер против линкера из binutils. Кроме того, он указывает на пустой каталог, так как на этом этапе я не сделал make install, чтобы установить его в каталог, указанный в --prefix.

Я пытался запустить make install независимо, но если я попытаюсь скомпилировать тестовую программу, используя lib c .so в дереве каталогов --prefix, используя rpath и dynamici c -linker настройки компиляции, я получаю точно такое же сообщение об ошибке утверждения.

Пример неудачной команды компиляции:

env GCONV_PATH = $ HOME / lib / glibc_build / iconvdata \ LOCPATH = $ HOME / lib / glibc_build / localedata LC_ALL = C \
$ HOME / lib / glibc_build / elf / ld- linux -x86-64.so.2 --library-path \
$ HOME / lib / glibc_build: $ HOME / lib / glibc_build / math: \
$ HOME / lib / glibc_build / elf: $ HOME / lib / glibc_build / dlfcn: \
$ HOME / lib / glibc_build / nss: $ HOME / lib / glibc_build / nis: \
$ HOME / lib / glibc_build / rt: $ HOME / lib / glibc_build / resolv: \
$ HOME / lib / glibc_build / mathve c: $ HOME / lib / glibc_build / support: \
$ HOME / lib / glibc_build / crypt: $ HOME / lib / glibc_build / nptl \
$ HOME / lib / glibc_build / csu / test-as-const-ucontext_i \

$ HOME / lib / glibc_build / csu / тест-в-сопзЬ-ucontext_i.out; \ ../scripts/evaluate-test.sh csu / test-as-const-ucontext_i $? false false \ $ HOME / lib / glibc_build / csu / test-as-const-ucontext_i.test-result Обнаружено несоответствие ld.so: get-dynamici c -info.h: 147: elf_get_dynamic_info: утверждение `info [DT_RPATH ] == NULL 'не удалось!

1 Ответ

0 голосов
/ 01 февраля 2020

В качестве проверки работоспособности я запускаю ldd на одном из исполняемых языков, которые выдают:

libc.so.6 => /lib64/libc.so.6 (0x00002b9080d40000)
$HOME$/lib/gnu/glibc_v2/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00002b9080b1c000)

Не обращайте внимания на вывод ldd: он будет l ie для вас, и в основном бессмысленно.

...