yum: gcc пытается установить архитектуру i686 на сервер x86_64

Я не знаю, почему он будет вести себя по-другому, но часто исполняемые файлы «перегружены», чтобы вести себя по-разному при вызове с разными именами.

Обычно внутри программы есть структура, называемая оператором case / switch, которая определяет имя, с которым был вызван исполняемый файл, а затем вызывает соответствующие функции для этого имени исполняемого файла. Это имя обычно является первым аргументом, который получает программа. Например, в C , когда вы пишете:

int main(int argc, char** argv)

argv [0] содержит имя вызываемого исполняемого файла. По крайней мере, это стандартное поведение для всех оболочек, и все исполняемые файлы, использующие аргументы, должны знать об этом.

Пример на Perl

Вот надуманный пример, который я собрал на Perl, который также показывает эту технику.

Вот настоящий сценарий, назовите его mycmd.pl :

#!/usr/bin/perl

use feature ':5.10';

(my $arg = $0) =~ s#./##;

my $msg = "I was called as: ";

given ($arg) {
  $msg .= $arg  when 'ls';
  $msg .= $arg  when 'find';
  $msg .= $arg  when 'pwd';
  default { $msg = "Error: I don't know who I am 8-)"; }
}

say $msg;
exit 0;

Вот настройка файловой системы:

$ ls -l
total 4
lrwxrwxrwx 1 saml saml   8 May 24 20:49 find -> mycmd.pl
lrwxrwxrwx 1 saml saml   8 May 24 20:34 ls -> mycmd.pl
-rwxrwxr-x 1 saml saml 275 May 24 20:49 mycmd.pl
lrwxrwxrwx 1 saml saml   8 May 24 20:49 pwd -> mycmd.pl

Теперь, когда я запускаю свои команды:

$ ./find 
I was called as: find

$ ./ls
I was called as: ls

$ ./pwd
I was called as: pwd

$ ./mycmd.pl 
Error: I don't know who I am 8-)

Как отлаживать?

Я использовал бы strace , чтобы выяснить, какие файлы конфигурации используются, когда «приложение» вызывается с различными именами.

$ strace -s 2000 -o xterm.log /usr/bin/xterm
... after its launched ...
$ exit

Затем запустите его еще раз, вот так:

$ strace -s 2000 -o emulator.log /etc/alternatives/x-terminal-emulator
... after its launched ...
$ exit

Вы захотите взглянуть на различные строки open (...) в выводе, чтобы сузить фокус до файлов, которые он вызывает.

Файл ~ / .Xresources?

Как @chepner предположил в комментариях, возможно, проблема вызвана ошибочным определением конфигурации в вашем файле ~ / .Xresources.Этот файл позволяет вам устанавливать различные вещи, такие как шрифт, используемый xterm

Вероятно, у вас есть такая строка:

XTerm*background: black
XTerm*foreground: gray
XTerm*title: terminal
XTerm*saveLines: 1024

Эти правила будут приняты приложениями с именем XTerm, но не другими такие приложения, как x-terminal-emulator . Также вполне возможно, что вместо этого правило выглядит так:

xterm*reverseVideo: on

ПРИМЕЧАНИЕ: Вы можете принудительно перезагрузить изменения в этом файле следующим образом:

$ xrdb -merge ~/.Xresources

Ссылки

1
02.02.2019, 00:00
1 ответ

Пакет gccнесколько особенный, поскольку компилятор в нем может создавать как 32 -битные, так и 64 -битные библиотеки. Чтобы это работало, ему нужны некоторые базовые системные библиотеки i686(libgccи glibc). Вы мало что можете с этим поделать, кроме перекомпиляции компилятора для отключения поддержки 32 -бит.

Вам лучше выяснить, почему glibc.i686не устанавливается. Похоже на несоответствие выпусков, возможно, из-за несовместимого сочетания репозиториев (у вас установлена ​​версия el7_6.3glibc-common, но пакету glibc.i686требуетсяel7).

2
27.01.2020, 23:31

Теги

Похожие вопросы