ошибка в make файле : /usr/bin/ld: не удается найти -lstdc++

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

Когда я пытаюсь создать файл CAMB, я получаю эту ошибку:

usr/bin/ld: не удается найти -lstdc++
collect2: ошибка: ld вернул статус выхода 1
make: *** [camb] Ошибка 1

Не хватает библиотеки?! Как мне добавить библиотеки?!

CAMB — это код на Fortran, написанный для данных Планка 2015 года, camb.info

Также с этой командой locate libstdc я получаю

/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19
/usr/share/doc/libstdc++6
/usr/share/gcc-4.8/python/libstdcxx
/usr/share/gcc-4.8/python/libstdcxx/__init__.py
/usr/share/gcc-4.8/python/libstdcxx/v6
/usr/share/gcc-4.8/python/libstdcxx/v6/__init__.py
/usr/share/gcc-4.8/python/libstdcxx/v6/printers.py
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py
/var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.1_amd64.deb
/var/lib/dpkg/info/libstdc++6:amd64.list
/var/lib/dpkg/info/libstdc++6:amd64.md5sums
/var/lib/dpkg/info/libstdc++6:amd64.postinst
/var/lib/dpkg/info/libstdc++6:amd64.postrm
/var/lib/dpkg/info/libstdc++6:amd64.prerm
/var/lib/dpkg/info/libstdc++6:amd64.shlibs
/var/lib/dpkg/info/libstdc++6:amd64.symbols

Это значит, что библиотека присутствует?! Как я могу исправить путь поиска библиотеки в makefile?

Может кто-нибудь помочь мне разобраться с этим? Я ценю ваше время и помощь

ОБНОВЛЕНИЕ

Я думаю, что нашел решение. По-видимому, -lstdc++ не нужен, и его можно удалить из makefile. Выполните следующие команды, чтобы решить эту проблему.

Сначала перейдите в директорию CAMB и затем выполните следующие команды:

sed -i 's/F90CRLINK ?= -lstdc++/#F90CRLINK ?= -lstdc++/g' Makefile_main
make clean
make CC=/usr/bin/gcc

Файл бинарного кода CAMB теперь должен существовать, если все пройдет хорошо.

Пожалуйста, сообщите о любых дополнительных ошибках.


ОРИГИНАЛЬНЫЙ ПОСТ

Я следовал этим шагам, и он успешно скомпилировался на 15.10:

sudo apt-get install gfortran git
git clone https://github.com/cmbant/CAMB.git
cd CAMB
make CC=/usr/bin/gcc

Бинарный файл camb должен быть собран в текущей директории.

Я также скачал исходный код с основного сайта и получил такой же результат.

Попробуйте установить эти библиотеки:

sudo apt-get install libstdc++-4.8-dev libstdc++6:amd64 libstdc++6:i386

Следует отметить, что версии dev обычно необходимы для сборки.

Пожалуйста, сообщите о любых дополнительных ошибках.


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

Ошибка связанная с отсутствием библиотеки в Makefile, вероятно, указывает на проблемы с конфигурацией при компиляции проекта CAMB. Давайте разберёмся детально с данной проблемой и возможными решениями.

Причина Ошибки

Ошибка, которую вы видите:

/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make: *** [camb] Error 1

указывает на то, что компилятор не может найти библиотеку libstdc++, что может произойти по нескольким причинам:

  1. Библиотека не установлена. На первый взгляд, это может показаться основной причиной, но как вы указали, библиотека фактически присутствует в системе. Результаты команды locate libstdc демонстрируют наличие библиотеки по следующему пути:

    /usr/lib/x86_64-linux-gnu/libstdc++.so.6
  2. Проблемы с путями поиска библиотек. Хотя библиотека присутствует, компилятор может не знать, где её искать.

  3. Неверные настройки Makefile. В некоторых случаях, опция -lstdc++ может быть ненужной в зависимости от используемого компилятора или конфигурации проекта.

Решение Проблемы

В вашем обновлении упоминается, что вы нашли решение, предложив закомментировать строку, которая включает -lstdc++ в Makefile. Это может быть действительно правильным подходом, особенно если проект не требует явного указания этой библиотеки:

sed -i 's/F90CRLINK ?= -lstdc++/#F90CRLINK ?= -lstdc++/g' Makefile_main
make clean
make CC=/usr/bin/gcc

Установка Библиотек

Для обеспечения успешной компиляции и запуска программы, может потребоваться установить некоторые пакеты. Вы правильно указали команды для установки необходимых библиотек:

sudo apt-get install libstdc++-4.8-dev libstdc++6:amd64 libstdc++6:i386

Важно: Пакеты libstdc++-4.8-dev содержат заголовочные файлы, которые могут быть необходимы для компиляции, в то время как libstdc++6 включает бинарные версии библиотеки.

Дополнительные Рекомендации

  1. Проверка пути библиотеки: Убедитесь, что путь к библиотеке libstdc++.so.6 присутствует в переменной окружения LD_LIBRARY_PATH. Это может помочь в случае, если библиотека не может быть найдена:

    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
  2. Проверка компилятора: Убедитесь, что вы используете совместимый компилятор, такой как gfortran, поскольку CAMB написан на Fortran.

  3. Чистка проекта: После изменения настроек Makefile всегда полезно выполнять make clean, чтобы удалить старые файлы сборки перед повторной компиляцией.

  4. Чтение документации: Ознакомьтесь с официальной документацией CAMB для получения дополнительной информации о зависимостях и требованиях к сборке.

Заключение

Ошибки компиляции, такие как "cannot find -lstdc++", могут быть решены несколькими способами. Комментарий в Makefile, установка необходимых библиотек, и правильная настройка путей поиска — это ключевые шаги на пути к успешной компиляции вашего проекта. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.

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

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