Из связь я хотел бы сам скомпилировать новый 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
Спасибо за ответ, но я думаю, что это выбор, а не обязательный шаг.
Спасибо за воспроизведение, я использую фрагмент кода оболочки в «инструкциях по этому слою», это дает мне некоторое представление. Мне нужно больше времени, чтобы вникнуть. большое спасибо.
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, или вы не показываете фактическую команду, которую вы использовали.
Спасибо за повтор, это все, что я запустил. Я ничего не менял намеренно. может что-то изменилось, и я проигнорировал. Я прочитал ваш ответ на вашу ссылку, но не думаю, что понял суть.
За инструкциями, на которые вы ссылаетесь, следует следующее: «Обратите внимание, что такая компиляция не использует новые заголовки или объекты среды выполнения C, например
crt1.o
,crti.o
иcrtn.o
, предоставляемые glibc. Изменения, внесенные в заголовки или объекты, требуют более сложной компиляции, см. подробности в дальнейших инструкциях ". Учитывая, что об ошибке сообщает ваша системаcrt1.o
, я сначала подумал бы следовать этим более поздним инструкциям.