Ошибка при попытке установить glibc в WSL: перемещение R_X86_64_PC32 на неопределенный символ `__GI___open64_nocancel ' - PullRequest
3 голосов
/ 26 марта 2019

При попытке установить последнюю версию glibc на мою машину при условии, что я выполнил исполняемый файл "config" с флагами: ../configure CFLAGS="-O3 -fPIC" --disable-sanity-checks он правильно генерирует make-файл, хотя я думаю, что disable-sanity-проверок приведет к некоторым ошибкам.

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

make[3]: Leaving directory '/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/elf'
gcc   -nostdlib -nostartfiles -shared -o /mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/ld.so.new                                                                                                \
          -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs       \
          /mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/librtld.os -Wl,--version-script=/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/ld.map
\
          -Wl,-soname=ld-linux-x86-64.so.2                      \
          -Wl,-defsym=_begin=0
/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/librtld.os: In function `process_envvars':
/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/elf/rtld.c:2686: undefined reference to `__GI___open64_nocancel'
/usr/bin/ld: /mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/librtld.os: relocation R_X86_64_PC32 against undefined symbol `__GI___open64_nocancel' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

Как я уже сказал, я пытался добавить флаг -fPIC, но все равно не поймал его. И я вроде как новичок в .os, .map и других расширениях, таких как те. Я делаю это совершенно неправильно? Или как мне скомпилировать только этот файл, используя gcc вместо передачи флага всей команде make?

1 Ответ

1 голос
/ 26 марта 2019

Ваша файловая система настроена неправильно. По умолчанию NTFS сохраняет регистр, но не учитывает регистр. Насколько я понимаю, текущие версии WSL настраивают только часть дерева файловой системы в режиме с учетом регистра. (Предыдущая общесистемная конфигурация теперь игнорируется.)

Для сборки glibc требуется чувствительная к регистру файловая система. Обратите также внимание на то, что WSL не является подходящей средой разработки для glibc, поскольку в эмуляции ядра WSL так много сбоев тестов.

...