Что происходит с новой скомпилированной, скомпилированной версией glibc / libc.so во время ошибки «перемещение имеет недопустимый индекс символа»?

Из связь я хотел бы сам скомпилировать новый glibc. Я знаю, что компилировать glic сложно, поэтому на первом этапе я хотел бы скомпилировать новый glibc, который соответствует той же самой версии, которая уже запущена в моей системе Linux. Я могу пропустить проверку зависимостей инструментальной цепочки и сосредоточиться на самом glic.

Моя информация об ubuntu похожа на:

    abbott@abbott-VirtualBox:/software/glibc/code$ uname -a
    Linux abbott-VirtualBox 4.4.0-31-generiC#50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
    abbott@abbott-VirtualBox:/software/glibc/code$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 14.04.5 LTS
    Release:    14.04
    Codename:   trusty

Вот уже существующий glibc: 2.19. проверьте версию, например:

abbott@abbott-VirtualBox:/software/glibc/code$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.9) 2.19

Я готовлю очень простой код на c для тестирования:

#include <stdio.h>
int main(){
        long z; printf("Long int size is %i bytes long!\n", sizeof(z)); 
        return 0;
}

Я компилирую этот код, используя уже существующий gcc,

gcc simple.c

Я иду на «аууу», все в порядке. это работает, это замечательно:

abbott@abbott-VirtualBox:/software/glibc/code$ ldd a.out
    linux-vdso.so.1 =>  (0x00007ffceaf0b000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a66f64000)
    /lib64/ld-linux-x86-64.so.2 (0x000055b9118c7000)

Итак, скачиваю с здесь, выбираю «glibc-2.19.tar.gz».

Я поместил источник в /software/glibc/glibc-2.19

компилировать в /software/glibc/compile-2.19

результат компиляции в порядке:

abbott@abbott-VirtualBox:/software/glibc/compile-2.19$ ../glibc-2.19/configure -prefix=/usr
abbott@abbott-VirtualBox:/software/glibc/compile-2.19$ make

В папке "compile-2.19" находится код оболочки testrun.sh, Я следую разделу «Обычная компиляция, запуск с новой glibc» в ссылка, все в порядке, работает.

abbott@abbott-VirtualBox:/software/glibc/compile-2.19$ ./testrun.sh ../code/a.out

Я следую разделу «Компиляция с использованием дерева сборки glibc» в ссылка,

GLIBC=/software/glibc/compile-2.19

gcc \
  -Wl,-rpath=${GLIBC}:\
${GLIBC}/math:\
${GLIBC}/elf:\
${GLIBC}/dlfcn:\
${GLIBC}/nss:\
${GLIBC}/nis:\
${GLIBC}/rt:\
${GLIBC}/resolv:\
${GLIBC}/crypt:\
${GLIBC}/nptl:\
${GLIBC}/dfp \
  -Wl,--dynamic-linker=${GLIBC}/elf/ld.so
  -o myligcsimple simple.c

Он выводит:

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 21
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

Я гуглил несколько дней, не нашел ответов. некоторые говорят, что отсутствует основная функция. но у меня есть основная функция, и код отлично работает с уже существующей glibc.

Вопрос 1:

Кто-нибудь поможет узнать, как решить проблему?

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11

За инструкциями, на которые вы ссылаетесь, следует следующее: «Обратите внимание, что такая компиляция не использует новые заголовки или объекты среды выполнения C, например crt1.o, crti.o и crtn.o, предоставляемые glibc. Изменения, внесенные в заголовки или объекты, требуют более сложной компиляции, см. подробности в дальнейших инструкциях ". Учитывая, что об ошибке сообщает ваша система crt1.o, я сначала подумал бы следовать этим более поздним инструкциям.

user743382 09.09.2018 11:06

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

gfan 09.09.2018 11:19

Спасибо за воспроизведение, я использую фрагмент кода оболочки в «инструкциях по этому слою», это дает мне некоторое представление. Мне нужно больше времени, чтобы вникнуть. большое спасибо.

gfan 09.09.2018 15:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
80
1

Ответы 1

I follow the "Compile against glibc build tree" section in the link, ... /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info)

В нет обстоятельств, если ваша ссылка использует объекты любой из /usr/lib/debug/, и показанные вами аргументы командной строки, конечно, не вызовут этого. См. Также этот ответ.

Следовательно, вполне вероятно, что вы рассказываете не всю историю. Возможно, вы изменили некоторые переменные среды или драйвер GCC, или вы не показываете фактическую команду, которую вы использовали.

Спасибо за повтор, это все, что я запустил. Я ничего не менял намеренно. может что-то изменилось, и я проигнорировал. Я прочитал ваш ответ на вашу ссылку, но не думаю, что понял суть.

gfan 10.09.2018 03:05

Другие вопросы по теме