Вопрос или проблема
Когда я пытаюсь создать файл 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++
, что может произойти по нескольким причинам:
-
Библиотека не установлена. На первый взгляд, это может показаться основной причиной, но как вы указали, библиотека фактически присутствует в системе. Результаты команды
locate libstdc
демонстрируют наличие библиотеки по следующему пути:/usr/lib/x86_64-linux-gnu/libstdc++.so.6
-
Проблемы с путями поиска библиотек. Хотя библиотека присутствует, компилятор может не знать, где её искать.
-
Неверные настройки 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
включает бинарные версии библиотеки.
Дополнительные Рекомендации
-
Проверка пути библиотеки: Убедитесь, что путь к библиотеке
libstdc++.so.6
присутствует в переменной окруженияLD_LIBRARY_PATH
. Это может помочь в случае, если библиотека не может быть найдена:export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
-
Проверка компилятора: Убедитесь, что вы используете совместимый компилятор, такой как
gfortran
, поскольку CAMB написан на Fortran. -
Чистка проекта: После изменения настроек Makefile всегда полезно выполнять
make clean
, чтобы удалить старые файлы сборки перед повторной компиляцией. -
Чтение документации: Ознакомьтесь с официальной документацией CAMB для получения дополнительной информации о зависимостях и требованиях к сборке.
Заключение
Ошибки компиляции, такие как "cannot find -lstdc++", могут быть решены несколькими способами. Комментарий в Makefile, установка необходимых библиотек, и правильная настройка путей поиска — это ключевые шаги на пути к успешной компиляции вашего проекта. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.