MacOS Sierra上找不到'openssl / conf.h'文件错误

时间:2017-04-14 16:00:49

标签: xcode ssl boost cmake homebrew

我正在开发一个使用boost asio的C ++项目。尝试构建使用亚洲的库,我收到以下错误

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

寻找解决方案here&amp; here,我试过了

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 SierraXcode 8.3.1。我使用Homebrew

安装了boost
brew install boost

据我所知,从其他链接来看,Xcode正在寻找ssl标头的错误位置。 但是我该如何解决这个问题?

我调查了/usr/local/include&amp; /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 a which openssl返回以下内容:

/usr/local/bin/openssl

请建议

2 个答案:

答案 0 :(得分:7)

是否链接,所有已安装的Homebrew软件包均可通过/usr/local/opt中的链接访问。此外,当您通过Homebrew安装openssl时,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的适当位置告诉你的目录。

答案 1 :(得分:0)

感谢@nega 提供their answer。我正在发布 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 所说,你不需要 brew link 任何东西。我按照消息中的建议在 bash 会话中导出了环境变量 PATH、LDFLAGS 和 CPPFLAGS,然后 make 对我来说效果很好。