macports gcc ошибка выбора при попытке выполнить i686-apple-darwin11-llvm-gcc-4.2

Вопрос или проблема

Я работаю на OS X 10.7 (Lion). Я установил gcc 4.7 из macports:

sudo port install gcc47

Кажется, оно работает правильно:

$ /opt/local/bin/gcc-mp-4.7 -v
(...)
gcc version 4.7.0 (GCC) 

Теперь я пытаюсь изменить компилятор по умолчанию, используя port select:

$ sudo port select gcc mp-gcc47
Выбор 'mp-gcc47' для 'gcc' завершен. 'mp-gcc47' теперь активен.

Это копирует бинарный файл gcc в /opt/local/bin/gcc, который работает правильно:

$ /opt/local/bin/gcc -v
(...)
gcc version 4.7.0 (GCC) 

Это также изменяет gcc по умолчанию:

$ which gcc
/opt/local/bin/gcc

Но запуск этого по умолчанию не работает:

$ gcc -v
gcc-mp-4.7: ошибка при попытке выполнить '/opt/local/bin/i686-apple-darwin11-llvm-gcc-4.2': execvp: Нет такого файла или директории

Этот бинарный файл “i686-apple-darwin11-llvm-gcc-4.2” – это оригинальная версия gcc, предоставленная Apple; я не знаю, почему он пытается искать его в /opt/local/bin, или даже почему он пытается запускать его вообще. Если я создам символическую ссылку, он просто вызывает этот бинарный файл, что не то, что я хочу:

$ sudo ln -s /usr/bin/i686-apple-darwin11-llvm-gcc-4.2 /opt/local/bin
$ gcc -v
(...)
gcc version 4.2.1 (основан на сборке Apple Inc. 5658) (LLVM сборка 2335.15.00)

Как это исправить, чтобы gcc работал правильно, просто вызывая “gcc”? Насколько я знаю, в более старых версиях OS X был инструмент gcc_select, но в моей системе его нет.

Скорее всего, это из-за того, что bash имеет закешированный gcc.

Запустите

$ hash

, чтобы увидеть, какие команды закешированы. Если /usr/bin/gcc появляется в списке, выполните

$ hash gcc

, чтобы обновить хеш gcc. После этого вы должны увидеть /opt/local/bin/gcc, если выполните hash, и запуск gcc должен запускать версию из macports – предоставляя, разумеется, что вы ее выбрали.

/B2S

Редактировать: Для пользователей zsh выполните $ rehash, чтобы обновить хеш полностью.

У меня такая же проблема, и это не правильное решение – я надеюсь, что кто-то предложит одно. На данный момент вызывайте его напрямую:

$ gcc-mp-4.7 -v
Использование встроенных спецификаций.
COLLECT_GCC=gcc-mp-4.7
COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin11/4.7.0/lto-wrapper
Цель: x86_64-apple-darwin11
    Конфигурирован с: ../gcc-4.7.0/configure --prefix=/opt/local --build=x86_64-apple-darwin11 --enable-languages=c,c++,objc,obj-c++,lto,fortran,java --libdir=/opt/local/lib/gcc47 --includedir=/opt/local/include/gcc47 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-4.7 --with-libiconv-prefix=/opt/local --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-4.7 --with-gxx-include-dir=/opt/local/include/gcc47/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --with-ppl=/opt/local --with-cloog=/opt/local --enable-cloog-backend=isl --enable-stage1-checking --disable-multilib --enable-lto --with-as=/opt/local/bin/as --with-ld=/opt/local/bin/ld --with-ar=/opt/local/bin/ar --with-bugurl=https://trac.macports.org/newticket --with-pkgversion='MacPorts gcc47 4.7.0_3'
Модель потоков: posix
gcc version 4.7.0 (MacPorts gcc47 4.7.0_3) 

Надеюсь, это поможет, пока не будет найдено постоянное решение.

Ответ или решение

Ваша проблема с выборами компилятора в MacPorts, связанная с ошибкой при запуске i686-apple-darwin11-llvm-gcc-4.2, возникает из-за того, что оболочка пытается использовать застарелую версию GCC, установленную Apple по умолчанию. Попробуем рассмотреть решение более детально.

Шаг 1: Убедитесь в корректности установки gcc 4.7

Вы уже выполнили установку GCC версии 4.7 через MacPorts, и он работает исправно. Для этого выполните следующую команду:

/opt/local/bin/gcc-mp-4.7 -v

Если в выводе отображается gcc version 4.7.0, это говорит о том, что компилятор установлен правильно.

Шаг 2: Проверка выбора компилятора

Вы правильно использовали команду port select для переключения на версию gcc:

sudo port select --set gcc mp-gcc47

Шаг 3: Освобождение кеша команд (hash)

Проблема может заключаться в том, что оболочка (например, bash или zsh) закэшировала путь к старой версии gcc. Вы можете проверить закэшированные версии команд, выполнив:

hash

Если в выводе есть путь /usr/bin/gcc, это означает, что оболочка всё еще ссылается на старую версию. Для сброса кеша и обновления пути выполните:

hash -r

Для пользователей zsh:

rehash

Шаг 4: Проверка результатов

Теперь попробуйте выполнить команду:

gcc -v

Вы должны увидеть вывод, который указывает на вашу установленную версию GCC 4.7.

Возможные дополнения

Если после выполнения всех вышеперечисленных шагов проблема остается, проверьте, не установлены ли в системе какие-либо другие конфликты с именами файлов, такие как символические ссылки на gcc. Убедитесь, что команда gcc правильно указывает на /opt/local/bin/gcc.

Заключение

Приведенные шаги должны помочь вам устранить проблему с вызовом неверной версии компилятора в MacPorts. Также стоит отметить, что всегда полезно обращаться к официальной документации MacPorts и поддержке сообщества для получения более актуальных решений проблем, связанных с настройкой среды разработки на macOS. Если вы все еще столкнулись с трудностями, возможно, стоит проверить наличие обновлений для MacPorts и установить их.

Оцените материал
Добавить комментарий

Капча загружается...