Я получаю ошибку: фатальная ошибка: файл ‘openssl/sha.h’ не найден при установке mongodb на Mac M1 для проекта Laravel.

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

 nssl.c:24:10: фатальная ошибка: файл 'openssl/sha.h' не найден
 #include <openssl/sha.h>
     ^~~~~~~~~~~~~~~
 1 ошибка сгенерирована.
 make: *** [src/libmongoc/src/libmongoc/src/mongoc/mongoc-crypto-openssl.lo] Ошибка 1
 ERROR: `make' завершился неудачей

Детали моей ОС:

НазваниеПродукта:        macOS
ВерсияПродукта:     14.3
ВерсияСборки:       23D56

вариант unix
локальный 23.3.0 Версия ядра Darwin 23.3.0: Ср Дек 20 21:30:27 PST 2023; root:xnu-10002.81.5~7/RELEASE_ARM64_T8103 x86_64

версия php: PHP 8.2.4 

Я выполнил команду терминала: sudo pecl install mongodb

это с этого сайта:
MongoDB PHP Driver

где моя установка остановилась с этой ошибкой:

 nssl.c:24:10: фатальная ошибка: файл 'openssl/sha.h' не найден
 #include <openssl/sha.h>
     ^~~~~~~~~~~~~~~
 1 ошибка сгенерирована.
 make: *** [src/libmongoc/src/libmongoc/src/mongoc/mongoc-crypto-openssl.lo] Ошибка 1
 ERROR: `make' завершился неудачей

Я нашел обходное решение ниже на: Mac OSX фатальная ошибка: ‘openssl/sha.h’ файл не найден

cd /usr/local/include 
ln -s ../opt/openssl/include/openssl .

Цитируя комментарий:

Apple прекратила поддержку своих общих библиотек OpenSSL некоторое время назад (с OS X 10.7). Это связано с тем, что OpenSSL не предлагает двоично-совместимость от версии к версии, поэтому мы не можем обновить общие библиотеки до последней версии OpenSSL, не сломав всех существующих клиентов.

но у меня даже нет папки include на моем маке … пожалуйста, помогите

Я получил путь к openssl, выполнив which openssl в терминале –
/opt/homebrew/bin/openssl

выполнив

    % ls -l /opt/homebrew/bin/openssl 

    lrwxr-xr-x  1 janammaharjan  admin  37 Фев  7 22:12 
    /opt/homebrew/bin/openssl -> ../Cellar/openssl@3/3.2.1/bin/openssl

Правильное решение

Давайте начнем с начала и используем официальный метод установки для PHP, Laravel и расширения MongoDB. В итоге у вас должен быть работающий родной сервер MAMP для разработки.


Шаги

Эти шаги предполагают, что мы хотим использовать Homebrew нативно для всего, что нам нужно в нашей среде разработки, при этом сохраняя версии необходимых инструментов macOS в первозданном виде.

  1. Установка Homebrew (для полноты информации, вы уже сделали это):
    • /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Одна строка
  2. Установка Node.js/npm:
    • brew install node
  3. Установка самой новой версии PHP из репозитория Homebrew:
    • brew install phpЕсли вам нужна другая версия, используйте идентификатор @. Пример: brew install [email protected]
  4. Установка Composer для управления зависимостями:
    • curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composerОдна строка
  5. Проверка установки
    • php --version composer --version
  6. Установка Laravel – это будет управляться Composer и не должно влиять на повседневное использование:
    • composer global require laravel/installer
  7. Создание пустого проекта:
    • composer create-project --prefer-dist laravel/laravel <имя-приложения>Обязательно замените имя-приложения на имя вашего проекта.
  8. Проверка, запускается ли проект
    • php artisan serveПроверьте ваш браузер на IP-адресе, который вы настроили на порт 8000

Ссылка: Как установить Laravel на macOS

Вышеуказанные шаги гарантируют, что этот ответ и ваш вопрос теперь начинаются с одного и того же места:

Добавить MongoDB

Цитируя из документации MongoDB: Установка библиотеки MongoDB PHP:

Примечание:

Если процесс сборки для любого из методов установки не может найти библиотеку TLS, проверьте, установлены ли пакеты разработки (например, libssl-dev) и pkg-config.

Поскольку ваш вопрос ссылается на эту заметку, давайте исправим это с помощью:

  1. brew install libssl-dev && brew install pkg-config

Объяснение

Пакет libssl-dev содержит отсутствующий заголовочный файл. Пакет/скрипт pkg config, установленный в cellar Homebrew, будет искать библиотеки для пакетов, также установленных в cellar. Он не будет сообщать о пути к библиотеке вне Homebrew обратно к make. После установки этих 2 пакетов команда pecl должна завершиться успешно в соответствии с Интеграцией MongoDB Laravel

я сам ответил на свой вопрос – здесь есть две команды:

curl -sS https://getcomposer.org/installer | php

и

sudo mv composer.phar /usr/local/bin/composer

Запуск их отдельно работает.

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

Устранение ошибки ‘openssl/sha.h’ при установке MongoDB на Mac M1 для проекта Laravel

Если вы сталкиваетесь с ошибкой "fatal error: ‘openssl/sha.h’ file not found" при попытке установить PHP драйвер MongoDB, то это связано с тем, что macOS больше не включает библиотеку OpenSSL по умолчанию, что может привести к отсутствию необходимых заголовочных файлов. Рассмотрим, как решить эту проблему шаг за шагом, используя Homebrew как основное средство управления пакетами.

Шаг 1: Проверка установки Homebrew

Если Homebrew еще не установлен, выполните следующую команду в терминале:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Шаг 2: Установка OpenSSL и необходимых зависимостей

Поскольку ошибка связана с отсутствием заголовочных файлов OpenSSL, сначала необходимо установить OpenSSL и другие необходимые пакеты:

brew install openssl pkg-config

Шаг 3: Настройка переменных окружения

После установки OpenSSL вам потребуется указать системе, где находятся заголовочные файлы OpenSSL. Обычно они находятся в /opt/homebrew/opt/openssl/include. Убедитесь, что вы добавили пути к include и lib в переменные окружения. Добавьте следующие строки в ваш ~/.zshrc или ~/.bash_profile, в зависимости от вашей оболочки:

export PATH="/opt/homebrew/opt/openssl/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl/include"

После внесения изменений обновите конфигурацию оболочки:

source ~/.zshrc

или

source ~/.bash_profile

Шаг 4: Установка PHP

Если у вас еще не установлен PHP через Homebrew, выполните следующую команду:

brew install php

Шаг 5: Установка Composer

Composer — это менеджер зависимостей для PHP. Чтобы установить Composer, выполните:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Шаг 6: Установка Laravel

Убедитесь, что Composer установлен правильно:

php --version
composer --version

Теперь установите Laravel:

composer global require laravel/installer

Создайте новый проект:

composer create-project --prefer-dist laravel/laravel <имя_вашего_проекта>

Шаг 7: Установка расширения MongoDB

Теперь, когда все необходимые зависимости установлены, вы можете установить драйвер MongoDB для PHP:

pecl install mongodb

Шаг 8: Проверка и настройка

После успешной установки драйвера убедитесь, что вы добавили строку в ваш php.ini, чтобы включить расширение MongoDB:

extension=mongodb.so

Заключение

Следуя этим шагам, вы сможете устранить ошибку с отсутствием openssl/sha.h и успешно установить PHP драйвер для MongoDB на вашем Mac M1. Если вы продолжаете сталкиваться с проблемами, убедитесь, что все шаги выполнены корректно и без ошибок.

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

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