составление gcc 9.2;ошибка: /usr/lib/../lib/crti.o: не удалось прочитать символы: файл в неправильном формате - PullRequest
0 голосов
/ 31 октября 2019

После создания трех вспомогательных библиотек (MPC, GMP, MPFR) я начал компиляцию gcc 9.2 следующим образом:

tar xvf gcc-9.2.0.tar.gz
cd gcc-9.2.0
sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
sed -e '/m64=/s/lib64/lib/' mkdir build
mkdir build
cd build
../configure --prefix=/local/1/appslog/tradserv --disable-multilib --with-system-zlib --enable-languages=c,c++ --with-gmp=/local/1/appslog/tradserv --with-mpfr=/local/1/appslog/tradserv --with-mpc=/local/1/appslog/tradserv
gmake

Он прекрасно работает в течение длительного времени (10+ минут?) До этой ошибки:

/local/1/appslog/fs/downloads/gcc/gcc-9.2.0/build/./gcc/xgcc -B/local/1/appslog/fs/downloads/gcc/gcc-9.2.0/build/./gcc/ -B/local/1/appslog/tradserv/x86_64-pc-linux-gnu/bin/ -B/local/1/appslog/tradserv/x86_64-pc-linux-gnu/lib/ -isystem /local/1/appslog/tradserv/x86_64-pc-linux-gnu/include -isystem /local/1/appslog/tradserv/x86_64-pc-linux-gnu/sys-include   -fno-checking -O2  -g -O2 -DIN_GCC    -W -Wall -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 _mulhc3_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _divhc3_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 _divmoddi4_s.o _udivdi3_s.o _umoddi3_s.o _udivmoddi4_s.o _udiv_w_sdiv_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
/usr/lib/../lib/crti.o: could not read symbols: File in wrong format

Проблема достаточно проста: 32-разрядный файл на 64-разрядной платформе и сборка:

> file /usr/lib/../lib/crti.o
/usr/lib/../lib/crti.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

Но почему сборка gcc даже выглядит /usr/lib? Кроме того, если перейти к каталогу, в котором выполняется эта команда, и выполнить команду вручную, указав (правильный) /usr/lib64/crti.o или -L/usr/lib64, он также не будет работать. (crti.o не появляется в команде, потребность в ней определяется внутренне для системы gcc.)

Я делаю дополнительный поиск по пакету unararred, моему каталогу сборки и каталогу префиксовдля crti.o (думая, что, возможно, из-за отсутствующей опции -L, я нахожу системную, когда мне нужно найти только что созданную марку или это было в файле tar), и нет. Единственный crti.o в любом относительном каталоге - это /usr/lib один выше.

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

> uname -a
Linux mymachine 2.6.32-642.6.2.el6.x86_64 #1 SMP Mon Oct 24 10:22:33 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

> g++ -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
...