Ошибка файла 'openssl/conf.h' в MacOS Sierra

Я работаю над проектом C++, который использует boost asio. Пытаясь построить библиотеки, которые используют Азию, я получаю следующую ошибку

/usr/local/include/boost/asio/ssl/detail/openssl_types.hpp:19:10: fatal error: 'openssl/conf.h' file not found
#include <openssl/conf.h>

Ища решения здесь и здесь, я попробовал

brew install openssl
brew link openssl --force
xcode-select --install

Но не помогло.

Выполнение следующих действий также не работает

export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include

Boost версия, которую я использую, boost_1_63_0, Я на MacOS Sierra с Xcode 8.3.1, Я установил повышение, используя Homebrew

brew install boost

Как я понимаю из других ссылок, Xcode ищет неправильное место для заголовков ssl. Но как я могу решить это?

Я заглянул в свой /usr/local/include & /opt/local/include, 'openssl/ssl.h' отсутствует ни в одном месте. Но делать brew install openssl говорит следующее

Warning: openssl is a keg-only and another version is linked to opt.
Use `brew install --force` if you want to install this version

Делать brew install openssl --force говорит

Warning: openssl-1.0.2k already installed, it's just not linked.

дела brew link openssl --force также не решает проблему.

Doig which openssl возвращает следующее:

/usr/local/bin/openssl

Пожалуйста, предложите

2 ответа

Решение

Связаны или нет, все установленные пакеты Homebrew доступны по ссылке в /usr/local/opt, Дополнительно при установке openssl через Homebrew Homebrew расскажет вам, как использовать библиотеки и заголовки openssl.

~ nega@rust 15s
❯ brew install openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2k.el_capitan.bottle.tar.gz
Already downloaded: /Users/nega/Library/Caches/Homebrew/openssl-1.0.2k.el_capitan.bottle.tar.gz
==> Pouring openssl-1.0.2k.el_capitan.bottle.tar.gz
==> Using the sandbox
==> Caveats
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include
For pkg-config to find this software you may need to set:
    PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig

==> Summary
  /usr/local/Cellar/openssl/1.0.2k: 1,696 files, 12MB

~ nega@rust 11s
❯ 

Вам не нужно brew link что-нибудь. Просто используйте каталоги, о которых вам говорит Homebrew, в соответствующих местах в Xcode и CMake.

Спасибо user4021251 за их ответ . Я публикую обновленную версию сообщения об установке чипа Apple M1 (Arm64), которое, к сожалению, слишком длинное, чтобы оставить его в качестве комментария к их ответу!

      A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /opt/homebrew/etc/openssl@1.1/certs

and run
  /opt/homebrew/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /opt/homebrew,
because macOS provides LibreSSL.

If you need to have openssl@1.1 first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"

For pkg-config to find openssl@1.1 you may need to set:
  export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@1.1/lib/pkgconfig"

Как сказал @nega, вам не нужно ничего варить. Я экспортировал переменные среды PATH, LDFLAGS и CPPFLAGS в свой сеанс bash, как рекомендовано в сообщении, а затем отлично работал для меня.

Другие вопросы по тегам