Вопрос или проблема
Мы пытаемся установить Oracle 11g R2 64 бит на машине Rhel 5.5 (64 бит). Версия ядра — 2.6.18-194.el5. При установке появляется следующая ошибка.
Ошибка в вызове цели 'mkldflags ntcontab.o nnfgt.o' makefile '/home/oracle/app/product/11.2.0/network/lib/ins_net_client.mk'.
Подробности смотрите в '/home/oracle/oraInventory/logs/installAction2013-09-03_04-52-05PM.log'.
Мы установили все необходимые библиотечные пакеты.
binutils-2.17.50.0.6-14.el5.x86_64
compat-libstdc++-33-3.2.3-61.x86_64
compat-libstdc++-33-3.2.3-61.i386
elfutils-libelf-0.137-3.el5.x86_64
elfutils-libelf-0.137-3.el5.i386
elfutils-libelf-devel-static-0.137-3.el5.x86_64
elfutils-libelf-devel-static-0.137-3.el5.i386
elfutils-libelf-devel-0.137-3.el5.x86_64
elfutils-libelf-devel-0.137-3.el5.i386
gcc-4.1.2-48.el5.x86_64
gcc-c++-4.1.2-48.el5.x86_64
glibc-2.5-49.x86_64
glibc-2.5-49.i686
glibc-common-2.5-49.x86_64
glibc-devel-2.5-49.x86_64
glibc-devel-2.5-49.i386
glibc-headers-2.5-49.x86_64
ksh-20100202-1.el5.x86_64
libaio-0.3.106-5.x86_64
libaio-0.3.106-5.i386
libaio-devel-0.3.106-5.x86_64
libaio-devel-0.3.106-5.i386
libgcc-4.1.2-48.el5.x86_64
libgcc-4.1.2-48.el5.i386
libstdc++-4.1.2-48.el5.x86_64
libstdc++-4.1.2-48.el5.i386
libstdc++44-devel-4.4.0-6.el5.x86_64
libstdc++44-devel-4.4.0-6.el5.i386
libstdc++-devel-4.1.2-48.el5.x86_64
libstdc++-devel-4.1.2-48.el5.i386
make уже установлен:
make-3.81-3.el5.x86_64
Содержимое файла журнала:
INFO: Вызов файла запросов Query fileQueries10.1.0.3.0 существует
filename = /home/oracle/app/product/11.2.0/rdbms/lib/libknlopt.a
INFO: Запрос вернул: false
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_nau.mk
installTarget = ioklist
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
undoMakeFileName = null
undoTarget = null
undoArguments = null
logFile = /home/oracle/app/product/11.2.0/install/make.log
progMsg = Linking Adapters
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_nau.mk
installTarget = iokinit
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
undoMakeFileName = null
undoTarget = null
undoArguments = null
logFile = /home/oracle/app/product/11.2.0/install/make.log
progMsg = Linking Adapters
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_nau.mk
installTarget = iokdstry
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
undoMakeFileName = null
undoTarget = null
undoArguments = null
logFile = /home/oracle/app/product/11.2.0/install/make.log
progMsg = Linking Adapters
INFO: Linking 'Oracle Database Utilities 11.2.0.3.0 '
INFO: Linking 'Oracle Database Utilities 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Database Utilities
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/rdbms/lib/ins_rdbms.mk
installTarget = utilities
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
undoMakeFileName = null
undoTarget = null
undoArguments = null
logFile = /home/oracle/app/product/11.2.0/install/make.log
progMsg = Linking Utilities Executables
INFO: Linking 'SQL*Plus 11.2.0.3.0 '
INFO: Linking 'SQL*Plus 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента SQL*Plus
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/sqlplus/lib/ins_sqlplus.mk
installTarget = install
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
undoMakeFileName = null
undoTarget = null
undoArguments = null
logFile = /home/oracle/app/product/11.2.0/install/make.log
progMsg = Linking SQLPLUS Executables
INFO: Linking 'Oracle Programmer 11.2.0.3.0 '
INFO: Linking 'Oracle Programmer 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Programmer
INFO: Linking 'Oracle Internet Directory Client 11.2.0.3.0 '
INFO: Linking 'Oracle Internet Directory Client 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Internet Directory Client
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/ldap/lib/ins_ldap.mk
installTarget = clientonlyinstall
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
undoMakeFileName = null
undoTarget = clientonlyinstall
undoArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
logFile = /home/oracle/app/product/11.2.0/install/make.log
progMsg = Linking OID Client
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/ldap/lib/ins_ldap.mk
installTarget = clientonlyinstall
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
undoMakeFileName = /home/oracle/app/product/11.2.0/ldap/lib/ins_ldap.mk
undoTarget = clientonlyinstall
undoArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
logFile = /home/oracle/app/product/11.2.0/install/make.log
progMsg = Linking Client-only Install
INFO: Linking 'SQLJ Runtime 11.2.0.3.0 '
INFO: Linking 'SQLJ Runtime 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента SQLJ Runtime
INFO: Linking 'Oracle SQLJ 11.2.0.3.0 '
INFO: Linking 'Oracle SQLJ 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle SQLJ
INFO: Linking 'Oracle Client 11.2.0.3.0 '
INFO: Linking 'Oracle Client 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Client
INFO: Идет связывание
INFO: Идет связывание
INFO: Link Phase JRE files в Scratch :0
INFO: Вызов действия unixActions10.2.0.3.0 make
registerOnly = false
installMakePath = /usr/bin/make
installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_net_client.mk
installTarget = mkldflags ntcontab.o nnfgt.o
undoMakeFileName =
installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
logFile = /home/oracle/app/product/11.2.0/install/make.log
undoTarget =
progMsg = Linking ldflags Executables
INFO: Linking ldflags Executables
INFO: Linking ldflags Executables
INFO: Вывод этой операции make также доступен в: '/home/oracle/app/product/11.2.0/install/make.log'
INFO:
INFO: Начало вывода из запущенного процесса:
INFO: ----------------------------------
INFO:
INFO: rm -f ntcontab.*
INFO: (if [ "compile" = "compile" ] ; then \
/home/oracle/app/product/11.2.0/bin/gennttab > ntcontab.c ;\
/usr/bin/gcc -m32 -m32 -fPIC -c ntcontab.c ;\
rm -f /home/oracle/app/product/11.2.0/lib/ntcontab.o ;\
mv ntcontab.o /home/oracle/app/product/11.2.0/lib/ ;\
/usr/bin/ar rv /home/oracle/app/product/11.2.0/lib/libn11.a /home/oracle/app/product/11.2.0/lib/ntcontab.o ; fi)
INFO: /bin/sh: line 2: /usr/bin/gcc: No such file or directory
INFO: mv: невозможно сделать стат 'ntcontab.o'
INFO: : No such file or directory
INFO: /usr/bin/ar: /home/oracle/app/product/11.2.0/lib/ntcontab.o: No such file or directory
INFO: make: *** [ntcontab.o] Ошибка 1
INFO: Конец вывода из запущенного процесса.
INFO: ----------------------------------
INFO: Исключение выброшено из действия: make
Exception Name: MakefileException
Exception String: Ошибка в вызове цели 'mkldflags ntcontab.o nnfgt.o' makefile '/home/oracle/app/product/11.2.0/network/lib/ins_net_client.mk'. Подробности смотрите в '/home/oracle/oraInventory/logs/installActions2013-09-03_04-52-05PM.log'.
Exception Severity: 1
INFO: Добавление ExitStatus STOP_INSTALL к набору выходных статусов
INFO: Поиск наиболее подходящего выходного статуса для текущего приложения
INFO: Exit Status is -4
INFO: Завершение работы установщика Oracle Client
Какое решение для этой ошибки?
Войдите в систему как root и выполните следующее:
- Переместите существующий файл /usr/bin/gcc в /usr/bin/gcc.orig с помощью команды mv:
mv /usr/bin/gcc /usr/bin/gcc.orig -
С помощью текстового редактора, например vi, создайте новый файл под названием gcc41, содержащий следующее содержимое (строка, начинающаяся с exec, должна быть единой строкой):
#!/bin/sh exec /usr/bin/gcc.orig -m32 -static-libgcc -B /usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/ $*
Примечание:
Каталог usr/lib/gcc/x86_64-redhat-linux/4.1.2/32/ может немного отличаться
в зависимости от версии вашей операционной системы Linux. Найдите
соответствующий каталог 32-bit в /usr/lib/gcc в вашей операционной
системе Linux и используйте этот каталог в файле gcc41.
-
Измените права на файл gcc41 с помощью следующей команды:
chmod 755 /usr/bin/gcc41 chmod 755 /usr/bin/gcc
- Создайте символическую ссылку на /usr/bin/gcc с помощью следующей команды:
ln -s -f /usr/bin/gcc41 /usr/bin/gcc - Выйдите из системы как root
Ответ или решение
Установка Oracle 11g R2 на системы с операционной системой Red Hat Enterprise Linux (RHEL) может столкнуться с различными проблемами, особенно если система требует компиляции или связывания разных компонентов. В вашем случае возникла ошибка при выполнении цели ‘mkldflags ntcontab.o nnfgt.o’ в makefile. Давайте подробно разберем возможные причины этой проблемы и шаги по её устранению.
Теория
Основная проблема, с которой вы столкнулись, связана с отсутствием правильной копии компилятора GCC в ожидаемом месте, то есть /usr/bin/gcc
. При установке Oracle требуется использование определенных архитектурных флагов, таких как -m32
, которые указывают компилятору на использование 32-битной архитектуры. Ошибка также подтверждается в лог-файле, который указывает на попытку выполнения компиляции с определенными флагами, но не может найти нужную версию GCC.
Пример
Рассмотрим конкретный шаг вывода из вашего журнала, где выполняется команда:
/usr/bin/gcc -m32 -m32 -fPIC -c ntcontab.c
и система сообщает, что файл или каталог не существует /usr/bin/gcc: No such file or directory
. Это указывает на то, что утилита make ожидает существование gcc
по пути /usr/bin/
, чего в данном случае нет.
Применение
Для решения этой проблемы вы можете следовать предложенному вами решению, а именно, создать обертку над компилятором GCC, которая обеспечит правильную маршрутизацию вызовов компиляции. Давайте подробно рассмотрим шаги:
-
Перенесите существующий файл GCC:
Используйте командуmv
для перемещения текущей версии компилятора в другую директорию, чтобы избежать изменения оригинальных файлов прямой командой.mv /usr/bin/gcc /usr/bin/gcc.orig
-
Создайте новый скрипт gcc41:
Используйте текстовый редактор, например,vi
, для создания нового файла скрипта, который будет направлять вызовы старого компилятора вместе с нужными флагами.vi /usr/bin/gcc41
Введите внутри следующий код:
#!/bin/sh exec /usr/bin/gcc.orig -m32 -static-libgcc -B /usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/ $*
Важно: Проверьте, что путь
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/
соответствует версии вашего компилятора GCC, которая установлена на вашей системе. Это может быть Path для другой версии GCC, если в вашей версии другое расположение. -
Измените разрешения файла:
После создания скрипта убедитесь, что он обладает необходимыми правами на выполнение:
chmod 755 /usr/bin/gcc41 chmod 755 /usr/bin/gcc
-
Создание символической ссылки:
Обновите ссылку на GCC, чтобы она использовала ваш новый скрипт:
ln -s -f /usr/bin/gcc41 /usr/bin/gcc
-
Завершите работу в качестве суперпользователя:
Просто выйдите из-под пользователя root, чтобы снизить риск случайного изменения критически важных системных настроек.
Безусловно, перед исполнением всех указанных выше шагов убедитесь, что у вас есть резервная копия всех изменяемых файлов, а также корректное понимание действий, так как изменения в системных файлах всегда могут нарушить работу других приложений. Эти шаги должны помочь устранить проблему компиляции и завершить установку Oracle 11g R2 на RHEL 5.5.