LINUX.ORG.RU
ФорумAdmin

Сборка через dockerfile (No CMAKE_CXX_COMPILER could be found.)

 


0

1

всем привет

Проблема следующая: Собираю проект через dockerfile и возникает ошибка

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:3 (project):
  No CMAKE_C_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:3 (project):
  No CMAKE_CXX_COMPILER could be found.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


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

что я делаю не так?


Ответ на: комментарий от Pinkbyte
FROM sp-dev.domain.ru/services/base_image:0.0.1
RUN cd /Project \
  && mkdir build \
  && cd build \
  && /usr/bin/cmake3 -DCMAKE_BUILD_TYPE=Release ../Services \
  && make -j6 \
  && make DESTDIR=/programm install \
  && rm -rf /Project

ничего особенного, беру готовый образ со всеми gcc make итд и пытаюсь собрать проект, но вот такая ошибка выше возникает.

если запускаю заранее образ и вручную внутри контейнера собираю проект, то все нормально собирается(на рабочем контейнере)

carter ()

Очевидно у тебя нет компилятора в путях. Я бы порекомендовал для начала посмотреть, где находится компилятор «в работающем контейнере» и посмотреть, а что же по этим путям лежит в sp-dev.domain.ru/services/base_image:0.0.1

kawaii_neko ★★★★ ()
Ответ на: комментарий от carter

Подсказываю: ты можешь вставить

which gcc

В исполняемые команды и посмотрет, что да как. А можешь и вовсе bash в базовом образе запустить и убедиться, что внутри нет никаких компиляторов.

kawaii_neko ★★★★ ()
Ответ на: комментарий от kawaii_neko

ты не поверишь

[root@52becec9b9a2 /]# which gcc
/opt/rh/devtoolset-9/root/usr/bin/gcc

я же вроде выше написал, что запускаю контейнер с образом и вручную делаю сборку. и все работает
carter ()
Последнее исправление: carter (всего исправлений: 1)
Ответ на: комментарий от carter

Очень возможно, что в CMake-говне (угрёбищная сборочная система) в лучших традициях говнокода упоротых идиотов из Kitware (которые сделали этот скам) захардкожен путь компилятора в /usr/bin/gcc, а значит нужно смотреть логи этого CMake.

Возможно ещё в переменных окружениях какие-то проблемы.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от kawaii_neko

ааа. а если команду внесу в докерфайл. то gcc не находит.

что я делаю не так с переменными? их как то надо по особому задавать через докерфайл что ли?

carter ()
Ответ на: комментарий от EXL

кстати да. я сделал симлинк в докерфайле и всё полетело

carter ()
Ответ на: комментарий от carter

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

docker run --rm -it -entry-point /bin/bash sp-dev.domain.ru/services/base_image:0.0.1

И надо не симлинки делать, а добавлять /opt/rh/devtoolset-9/root/usr/bin в PATH.

kawaii_neko ★★★★ ()
Ответ на: комментарий от carter

что я делаю не так с переменными? их как то надо по особому задавать через докерфайл что ли?

Дай угадаю - ты их в какой-нибудь bashrc прописал внутри контейнера?

Так вот я тебя не обрадую - bash-то в контейнере у тебя не в интерактивном режиме не стартует. И bashrc не грузится.

Переменные окружения в самом Dockerfile задавать надо.

Ну или запускать cmake через bash -c 'cmake', но это черезжопно.

Pinkbyte ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.