‹проект› — отладка использует недопустимый компилятор. Возможно, путь набора инструментов в параметрах компилятора настроен неправильно?

У меня возникли проблемы с настройкой CodeBlocks для нестандартного компилятора. Я боролся с этим в течение 3 или 4 дней (время от времени). Я получаю сообщение об ошибке:

"<project> - Debug" uses an invalid compiler. Probably the toolchain path
within the compiler options is not setup correctly?!

Мне нужно использовать следующие настройки при создании этого проекта. Он интегрируется с библиотекой OpenSSL с поддержкой FIPS. Библиотека OpenSSL с поддержкой FIPS была собрана из исходников и установлена ​​в /usr/local/ssl:

$ export CC=`find /usr/local/ssl -name fipsld`
$ export FIPSLD_CC=`find /usr/bin -name g++`
$ echo $CC
/usr/local/ssl/fips-2.0/bin/fipsld
$ echo $FIPSLD_CC
/usr/bin/g++

fipsld скомпилирует fips_premain.c и выполнит некоторые действия, чтобы убедиться, что подпись модуля встроена в полученный исполняемый файл. Если fipsld не нужен, то он просто вызывает CC (следовательно, необходимо установить причину FIPSLD_CC (см. также комментарий Майка к циклической зависимости)).

Я проделывал это тысячу раз из командной строки с make-файлами, так что я знаю, что это работает.

Окружающая среда

В разделе Настройки -> Среда у меня есть следующее:

Среда CodeBlocks

Компилятор и отладчик

В разделе Настройки -> Компилятор и отладчик у меня есть следующее:

Программные файлы CodeBlocks

И:

CodeBlocks Дополнительные пути

Проект

В проекте используется компилятор FIPSLD:

Компилятор проекта CodeBlocks

Но когда я пытаюсь построить, я получаю следующее:

введите здесь описание изображения

Я также попытался установить компилятор на полный указанный путь /usr/local/ssl/fips-2.0/bin/fipsld.

(И я закрывал / открывал CodeBlocks слишком много раз, чтобы сосчитать, и много раз очищал этот проект, чтобы попытаться перечитать настройки конфигурации).

Вопрос

Как установить компилятор на /usr/local/ssl/fips-2.0/bin/fipsld в CodeBlocks?

И связанный с этим: у меня gdb-7.6.2 установлен в /usr/local/bin. Но CodeBlocks использует gdb-7.4, поставляемый с Debian, хотя у меня есть пути, указанные и для отладчика (это путь usr/local к /usr/local/bin/gdb). Есть идеи, что здесь не так?

Для полноты это не связано с недопустимой ошибкой цепочки инструментов с Code::Blocks. В этом вопросе SO у OP не была установлена ​​​​цепочка инструментов.


person jww    schedule 11.01.2014    source источник


Ответы (1)


Проблема "неверный компилятор" может быть решена следующим образом (по крайней мере, для меня). Я не знаю, будет ли этого достаточно, чтобы вы могли построить свой проект.

Я предполагаю, что сценарий fipsld присутствует и корректен в /usr/local/ssl/fips-2.0/bin/fipsld.

  • В Code::Blocks IDE создайте новый компилятор с именем по вашему выбору, который является копией GCC. (Похоже, вы успешно это сделали)

  • В настройках нового компилятора перейдите на вкладку Исполняемые файлы Toolchain и задайте следующие новые настройки:

    • Compiler's installation directory = <empty>
    • Файлы программы -> компилятор C = /usr/local/ssl/fips-2.0/bin/fipsld
  • Оставьте все остальные настройки компилятора без изменений и OK.

  • Убедитесь, что в Code::Blocks установлен подключаемый модуль редактора переменных среды в соответствии с https://stackoverflow.com/a/21064014/1362568

  • В разделе Среда -> Переменные среды добавьте настройку переменной среды:

    СС = gcc

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

Теперь я могу создавать проекты C с помощью нового компилятора. Code::Blocks выдает предупреждение Can't find compiler executable in your configured search paths for <compiler_name> во время сборки, но это ложная тревога.

Параметры среды, показанные на снимке экрана:

CC = /usr/local/ssl/fips-2.0/bin/fipsld
FIPSLD_CC = /usr/bin/g++

не соответствуют действительности, потому что первая строка сценария fipsld:

CC=${FIPSLD_CC:-${CC}}

Таким образом, если вы сделаете первую из двух настроек, но не сделаете вторую, сценарий по умолчанию будет использовать $CC для своего собственного имени пути - цикличность. И если вы избежите этого, задав обе настройки, то первая будет лишней для Code::Blocks: ей не нужна переменная окружения, ссылающаяся на /usr/local/ssl/fips-2.0/bin/fpsld, потому что вы настроили этот скрипт как компилятор. Только сам fipsld хочет $CC, ссылаясь на компилятор C. Таким образом, вы можете просто установить CC = gcc, основной компилятор C. CC = g++ может подойти для ваших целей, но обычно CC относится к вашему компилятору C, а ваш компилятор C++ обозначается CXX.

Что касается проблемы настройки /usr/local/bin/gdb для вызова вместо /usr/bin/gdb, я могу говорить только о версии 12.11, которую я запускаю, но для 12.11 это ответ

person Mike Kinghan    schedule 12.01.2014
comment
Спасибо, Майк, я иду. Очистка каталога установки компилятора и использование /usr/local/ssl/fips-2.0/bin/fipsld сделали свое дело. - person jww; 12.01.2014
comment
если вы сделаете первую из двух настроек, но не вторую, скрипт по умолчанию будет использовать $CC для своего собственного имени пути - цикличность - да, если вы не установите FIPSLD_CC, тогда это создаст много проблем (было там, сделано тот...). - person jww; 12.01.2014