2017-01-31 2 views
-1

Я пытаюсь установить LISTSERV на lsoft.com на redhat. Пакет поставляется с тестом на компилятор, и этот тест не работает.Ошибка компилятора, gcc on redhat

ОС:

Red Hat Enterprise Linux Server релиз 6.8 (Santiago)

аркой:

x86_64

Компилятор :

ССАГПЗ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)

Вот полный "НКУ -v":

Используя встроенные функции.

Цель: x86_64-RedHat-линукс

Настраивается с: ../configure prefix =/USR --mandir =/USR/доли/человек --infodir =/USR/доли/Информация о - с-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

Модель

Тема: POSIX

GCC версии 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)

compilertest.c:

main() 
{} 

Команда составитель теста :

gcc -O compilertest.c 

сообщение об ошибке:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o: не удалось прочитать символы: Файл не в том формате collect2: ld 1 статус выхода

Файл существует как действительный файл (т. е. не является символической ссылкой):

-rw-р - r-- 1 корень корень 1240 28 января 2016 /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../ .. /../crt1.o

Итак, что мне не хватает? Было ли что-то скомпилировано с использованием 32b вместо 64b? Я пропустил библиотеку или имею неправильную версию?


$ readelf -h /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o 
ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       UNIX - System V 
    ABI Version:      0 
    Type:        REL (Relocatable file) 
    Machine:       Intel 80386 
    Version:       0x1 
    Entry point address:    0x0 
    Start of program headers:   0 (bytes into file) 
    Start of section headers:   288 (bytes into file) 
    Flags:        0x0 
    Size of this header:    52 (bytes) 
    Size of program headers:   0 (bytes) 
    Number of program headers:   0 
    Size of section headers:   40 (bytes) 
    Number of section headers:   13 
    Section header string table index: 10 

$ env -i PATH=/usr/bin gcc -O compilertest.c 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o: could not read symbols: File in wrong format 
collect2: ld returned 1 exit status 

$ gcc -v compilertest.c 
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-17) (GCC) 
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' 
/usr/libexec/gcc/x86_64-redhat-linux/4.4.7/cc1 -quiet -v compilertest.c -quiet -dumpbase compilertest.c -mtune=generic -auxbase compilertest -version -o /tmp/ccGTjhJB.s 
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include-fixed" 
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../x86_64-redhat-linux/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/local/include 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include 
/usr/include 
End of search list. 
GNU C (GCC) version 4.4.7 20120313 (Red Hat 4.4.7-17) (x86_64-redhat-linux) 
     compiled by GNU C version 4.4.7 20120313 (Red Hat 4.4.7-17), GMP version 4.3.1, MPFR version 2.4.1. 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
Compiler executable checksum: 2e79a9448b1040fd1e442d3c6bfaea69 
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' 
as -V -Qy -o /tmp/cc4clAj5.o /tmp/ccGTjhJB.s 
GNU assembler version 2.20.51.0.2 (x86_64-redhat-linux) using BFD version version 2.20.51.0.2-5.44.el6 20100205 
COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/4.4.7/:/usr/libexec/gcc/x86_64-redhat-linux/4.4.7/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/:/usr/lib/gcc/x86_64-redhat-linux/:/usr/libexec/gcc/x86_64-redhat-linux/4.4.7/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/:/usr/lib/gcc/x86_64-redhat-linux/ 
LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.4.7/:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../:/lib/:/usr/lib/ 
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' 
/usr/libexec/gcc/x86_64-redhat-linux/4.4.7/collect2 --eh-frame-hdr --build-id -m elf_x86_64 --hash-style=gnu -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crti.o /usr/lib/gcc/x86_64-redhat-linux/4.4.7/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../.. /tmp/cc4clAj5.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/4.4.7/crtend.o /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crtn.o 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o: could not read symbols: File in wrong format 
collect2: ld returned 1 exit status 

$ file /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o 
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.18, not stripped 
+0

Во время сценария установки это выглядит так: «Ваш компилятор не работает (тест был« gcc -O compilertest.c », сценарий ожидает двоичного имени по умолчанию a.out). Только предварительно скомпилированные двоичные файлы будут доступный для установки ». И, конечно, прекомпилированные двоичные файлы тоже не работают. –

+0

Можете ли вы показать вывод 'readelf -h /usr/lib/gcc/x86_64-redhat-linux/4.4.7 /../../../ crt1.o' –

+0

Есть ли' env -i PATH =/usr/bin gcc -O compilertest.c' работает? –

ответ

1

Это сообщение об ошибке:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o: не удалось прочитать символы: файл в неправильном формате collect2: ld возвращен 1 статус выхода

Указывает, что линкер нашел 32-битный файл объекта, где ожидается 64-битной один, или наоборот . Вы можете определить, какой из них можно проверить с помощью команды file. readelf немного переборщит для этой цели, но он также выполняет свою работу. В результате мы знаем, что ваш 32-битный объектный файл ELF, поэтому предположительно компилятор ожидает 64-битного.

Путь, который вы представляете, канонизирует до /usr/lib/crt1.o. На RHEL6, который принадлежит 32-битовому пакету glibc-devel (64-разрядный аналог живет в /usr/lib64). 32-битный ELF-объект - это именно то, что должен делать этот файл, поэтому, если компилятор ожидает 64-битного объекта, то с ним что-то серьезно не так.

Мое лучшее предположение, что установка из исходного кода или из пакета для какого-либо другого дистрибутива RPM (возможно, даже для другой версии RHEL) создала непригодную для вас среду. Если у вас есть установленная от источника копия GCC где-то, кроме /usr/bin, то удаление этого (по крайней мере, пути) может быть достаточным для решения вашей проблемы. Команда which gcc может быть полезна для определения того, получаете ли вы жулика gcc вместо стандартного RHEL.

В противном случае лучше всего удалить все копии gcc и библиотек разработки, а затем переустановить из официальных репозиториев пакетов. Основными пакетами для удаления и переустановки являются «gcc» и «glibc-devel»; удаление их может привести к удалению других инструментов и библиотек разработки. Я рекомендую также удалить любой пакет «compat-gcc». Однако не пытайтесь удалить основной пакет «glibc», так как если вы каким-то образом это сделаете, это сделает вашу систему неработоспособной.

+0

Спасибо. Я буду работать с соответствующей группой и посмотреть, смогут ли они исправить окружающую среду. Или, не говоря уж о том, чтобы они создали мне новую виртуальную машину. –

Смежные вопросы