Falla de segmentación al construir GCC

3

Estoy tratando de compilar gcc. Descargué la última versión del sitio web de GCC (versión 6.3.0), pero tengo algunos problemas para crear gcc. Estoy pasando las siguientes opciones al script de configuración:

configure --prefix=<location I want to install> --disable-multilib --disable-linux-futex

Nota: Esto se compila bien sin la opción de configuración --disable-linux-futex. necesito pasar --disable-linux-futex porque estoy tratando de usar valgrind para depurar un programa que escribí que utiliza OpenMP, y me dicen que necesito GCC compilado con esa opción Despues escribo make la compilación comienza y se ejecuta con éxito durante mucho tiempo, hasta que obtengo los siguientes errores:

make[3]: Entering directory '/home/ahanlon/packages/gcc-6.3.0-build/x86_64-pc-linux-gnu/libgcc'
# If this is the top-level multilib, build all the other
# multilibs.
# Early copyback; see "all" above for the rationale.  The
# early copy is necessary so that the gcc -B options find
# the right startup files when linking shared libgcc.
/bin/sh ../../../gcc-6.3.0/libgcc/../mkinstalldirs ../.././gcc
parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o crtprec32.o crtprec64.o crtprec80.o crtfastmath.o";                    \
for file in $parts; do                  \
  rm -f ../.././gcc/$file;      \
  /usr/bin/install -c -m 644 $file ../.././gcc/;    \
  case $file in                     \
    *.a)                        \
      ranlib ../.././gcc/$file ;;   \
  esac;                         \
done
# @multilib_flags@ is still needed because this may use
# /home/ahanlon/packages/gcc-6.3.0-build/./gcc/xgcc -B/home/ahanlon/packages/gcc-6.3.0-build/./gcc/ -B/home/ahanlon/.local/x86_64-pc-linux-gnu/bin/ -B/home/ahanlon/.local/x86_64-pc-linux-gnu/lib/ -isystem /home/ahanlon/.local/x86_64-pc-linux-gnu/include -isystem /home/ahanlon/.local/x86_64-pc-linux-gnu/sys-include    and -O2  -g -O2 -DIN_GCC    -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include   -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector  directly.
# @multilib_dir@ is not really necessary, but sometimes it has
# more uses than just a directory name.
/bin/sh ../../../gcc-6.3.0/libgcc/../mkinstalldirs .
/home/ahanlon/packages/gcc-6.3.0-build/./gcc/xgcc -B/home/ahanlon/packages/gcc-6.3.0-build/./gcc/ -B/home/ahanlon/.local/x86_64-pc-linux-gnu/bin/ -B/home/ahanlon/.local/x86_64-pc-linux-gnu/lib/ -isystem /home/ahanlon/.local/x86_64-pc-linux-gnu/include -isystem /home/ahanlon/.local/x86_64-pc-linux-gnu/sys-include    -O2  -g -O2 -DIN_GCC    -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include   -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector  -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -g -O2 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o _powixf2_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o cpuinfo_s.o sfp-exceptions_s.o addtf3_s.o divtf3_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o fixtfti_s.o fixunstfti_s.o floattitf_s.o floatuntitf_s.o extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o getf2_s.o letf2_s.o eqtf2_s.o _divtc3_s.o _multc3_s.o _powitf2_s.o enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1 ./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp ./libgcc_s.so.1 && (echo "/* GNU ld script"; echo "   Use the shared library, but some functions are only in"; echo "   the static library.  */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > ./libgcc_s.so
dest=../.././gcc/include/tmp$$-unwind.h; \
cp unwind.h $dest; \
chmod a+r $dest; \
sh ../../../gcc-6.3.0/libgcc/../move-if-change $dest ../.././gcc/include/unwind.h
# Now that we have built all the objects, we need to copy
# them back to the GCC directory.  Too many things (other
# in-tree libraries, and DejaGNU) know about the layout
# of the build tree, for now.
make install-leaf DESTDIR=../.././gcc \
  slibdir= libsubdir= MULTIOSDIR=.
make[4]: Entering directory '/home/ahanlon/packages/gcc-6.3.0-build/x86_64-pc-linux-gnu/libgcc'
/bin/sh ../../../gcc-6.3.0/libgcc/../mkinstalldirs ../.././gcc
/usr/bin/install -c -m 644 libgcc_eh.a ../.././gcc/
chmod 644 ../.././gcc/libgcc_eh.a
ranlib ../.././gcc/libgcc_eh.a
ranlib: /usr/lib/libLLVM-3.9.so: symbol _ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

make[4]: *** [Makefile:1115: install-shared] Segmentation fault (core dumped)
make[4]: Leaving directory '/home/ahanlon/packages/gcc-6.3.0-build/x86_64-pc-linux-gnu/libgcc'
make[3]: *** [Makefile:113: all] Error 2
make[3]: Leaving directory '/home/ahanlon/packages/gcc-6.3.0-build/x86_64-pc-linux-gnu/libgcc'
make[2]: *** [Makefile:17378: all-stage1-target-libgcc] Error 2
make[2]: Leaving directory '/home/ahanlon/packages/gcc-6.3.0-build'
make[1]: *** [Makefile:23677: stage1-bubble] Error 2
make[1]: Leaving directory '/home/ahanlon/packages/gcc-6.3.0-build'
make: *** [Makefile:914: all] Error 2

Parece que el problema es con ranlib en ../.././gcc/libgcc_eh.a, pero no tengo ni idea de qué hacer al respecto, o qué se supone que debe hacer ranlib. Cualquier ayuda sería muy apreciada. Avísame si puedo dar más detalles útiles sobre mi configuración.

adhanlon
fuente

Respuestas:

1

Probablemente un problema de dependencia. Me refiero a este mensaje de error:

ranlib: /usr/lib/libLLVM-3.9.so: símbolo   _ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj, versión GLIBCXX_3.4.21 no definida en el archivo libstdc ++. So.6 con tiempo de enlace   referencia

Esto probablemente significa que sus bibliotecas no coinciden con la versión del compilador están compilando El archivo make está buscando GLIBCXX versión 3.4.21, Que al parecer no tienes.

Sugiero que se actualice Linux para que coincida con la versión GCC que está compilando o use una versión anterior de GCC que coincida con sus bibliotecas.

Para obtener más información y sugerencias, consulte estas publicaciones de Ask Ubuntu:

harrymc
fuente
1
Gracias por su respuesta. Todavía estoy muy desconcertado por esto. Realmente no entiendo lo que significa GLIBCXX. ¿Conoces alguna fuente donde pueda aprender más sobre estas cosas? Además, cuando lo hago strings libstdc++.so.6 la salida incluye GLIBCXX_3.4.21. Entonces, ¿no tengo todas las versiones correctas? Intenté compilar una versión anterior de GCC y tengo el mismo problema. Además, desde que he compilado GCC sin el --disable-linux-futex Opción, ¿no sugeriría que todas mis versiones son correctas? ¿Qué podría ser diferente acerca de esa opción?
adhanlon
Leí que debería estar usando readelf inspeccionar libstdc++.so.6. Entonces, corrí eso, y encontré lo siguiente 00000000003835c0 000011de00000007 R_X86_64_JUMP_SLOT 00000000000b96d0 _ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj@@GLIBCXX_3.4.21 + 0. Esto también parece sugerir que las versiones son correctas ...
adhanlon
Creo que de alguna manera hay una mezcla de bibliotecas, tal vez causadas por variables de entorno. Se necesitará algún trabajo de detective. Ver esta publicación para mas ideas
harrymc
Haré un poco más de investigación y te responderé. Gracias por su ayuda hasta ahora.
adhanlon
Actualización: Tal vez esto era obvio, pero determiné que la libstdc++.so.6 referido en el error no es el instalado en mi sistema en /usr/lib, pero es el que encuentro en mi directorio de compilación de gcc (asumo que se está compilando antes en el proceso de compilación). Entonces, ¿tengo razón al pensar que no tengo control sobre esto? ¿Que esto se está construyendo durante la compilación, y esto es un error?
adhanlon