Segmentierungsfehler beim Erstellen von GCC

1089
adhanlon

Ich versuche, GCC zu kompilieren. Ich habe die neueste Version von der GCC-Website (Version 6.3.0) heruntergeladen, habe jedoch Probleme beim Erstellen von Gcc. Ich übergebe folgende Optionen an das configure-Skript:

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

Hinweis: Dies lässt sich ohne die configure-Option gut kompilieren --disable-linux-futex. Ich muss bestehen, --disable-linux-futexweil ich versuche, valgrind zu verwenden, um ein Programm zu debuggen, das ich geschrieben habe und das OpenMP verwendet, und sie sagen mir, ich brauche GCC, das mit dieser Option kompiliert wurde. Nach makeder Eingabe beginnt der Build und wird sehr lange erfolgreich ausgeführt, bis folgende Fehler angezeigt werden:

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 

Es scheint, dass das Problem mit ranlib an ist ../.././gcc/libgcc_eh.a, aber ich habe keine Ahnung, was ich tun soll oder was Ranlib tun soll. Jede Hilfe wäre sehr dankbar. Lassen Sie mich wissen, ob ich weitere hilfreiche Informationen zu meinem Setup geben kann.

3

1 Antwort auf die Frage

1
harrymc

Wahrscheinlich ein Abhängigkeitsproblem. Ich beziehe mich auf diese Fehlermeldung:

ranlib: /usr/lib/libLLVM-3.9.so: Symbol _ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj, Version GLIBCXX_3.4.21 nicht in der Datei libstdc ++ definiert

Dies bedeutet wahrscheinlich, dass Ihre Bibliotheken nicht mit der Compilerversion übereinstimmen, die Sie kompilieren. Das Makefile sucht nach GLIBCXX Version 3.4.21, die Sie anscheinend nicht haben.

Ich empfehle, entweder Linux auf die GCC-Version, die Sie kompilieren, zu aktualisieren oder eine ältere GCC-Version zu verwenden, die Ihren Bibliotheken entspricht.

Weitere Informationen und Vorschläge finden Sie in den folgenden Beiträgen von Ask Ubuntu:

Danke für Ihre Antwort. Ich bin darüber immer noch sehr verwirrt. Ich verstehe nicht wirklich was GLIBCXX bedeutet. Kennen Sie irgendwelche Quellen, wo ich mehr über diese Dinge erfahren kann? Wenn ich `strings libstdc ++. So.6 'mache, enthält die Ausgabe auch' GLIBCXX_3.4.21 '. Habe ich nicht alle korrekten Versionen? Ich habe versucht, eine ältere Version von GCC zu kompilieren, und ich habe das gleiche Problem. Da ich GCC auch ohne die Option --disable-linux-futex erfolgreich kompiliert habe, würde das nicht bedeuten, dass alle meine Versionen richtig sind? Was könnte an dieser Option anders sein? adhanlon vor 7 Jahren 1
Ich habe gelesen, dass ich `readelf` verwenden sollte, um` libstdc ++. So.6` zu überprüfen. Also lief ich das und fand Folgendes: 00000000003835c0 000011de00000007 R_X86_64_JUMP_SLOT 00000000000b96d0 _ZNSt28__atomic_futex_unsigned_base19_M_futex_notify_allEPj@@ GLIBCXX_3.40.20. Dies scheint auch darauf hinzudeuten, dass die Versionen korrekt sind ... adhanlon vor 7 Jahren 0
Ich glaube, irgendwie gibt es eine Mischung aus Bibliotheken, die möglicherweise durch Umgebungsvariablen verursacht werden. Etwas Detektivarbeit wird benötigt. Weitere Informationen finden Sie in [diesem Beitrag] (http://stackoverflow.com/questions/5216399/usr-lib-libstdc-so-6-version-glibcxx-3-4-15-not-found). harrymc vor 7 Jahren 0
Ich werde weitere Nachforschungen anstellen und mich mit Ihnen in Verbindung setzen. Vielen Dank für Ihre bisherige Hilfe. adhanlon vor 7 Jahren 0
Update: Vielleicht war das offensichtlich, aber ich habe festgestellt, dass die im Fehler genannte `libstdc ++. So.6` nicht die in meinem System in` / usr / lib` installierte ist, sondern die, die ich in meinem gcc finde Verzeichnis erstellen (ich gehe davon aus, dass es früher im Kompilierungsprozess erstellt wird). Ist es also richtig zu glauben, dass ich keine Kontrolle darüber habe? Dass dies während der Kompilierung erstellt wird, und dies ist ein Fehler? adhanlon vor 7 Jahren 0
Sie können mehr im Makefile sehen, aber ich stimme zu, dass es wahrscheinlich schlecht geschrieben ist. Eine Vermutung: Vielleicht verwendet `ranlib` das falsche` libstdc ++ `, so dass Ihre Tools in der Version näher an dem sind, was Sie kompilieren. Möglicherweise müssen Sie diese Tools zuerst erstellen. harrymc vor 7 Jahren 0