Edited at

El Capitanでソースをコンパイルしたときにopensslのエラーが出た場合の対処方法

More than 1 year has passed since last update.


遭遇した事象

libimobiledeviceをソースからコンパイルしようとしたところ、以下のエラーが出て失敗しました。


コマンド

$ ./configure

# 省略
Configuration for libimobiledevice 1.2.0:
-------------------------------------------

Install prefix: .........: /usr/local
Debug code ..............: no
Python bindings .........: no
SSL support backend .....: OpenSSL

Now type 'make' to build libimobiledevice 1.2.0,
and then 'make install' for installation.

$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make all-recursive
Making all in common
CC socket.lo
CC thread.lo
CC debug.lo
In file included from debug.c:36:
../src/idevice.h:30:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
^
1 error generated.
make[2]: *** [debug.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2


ssl.hを見つけられていないようです。

ネットを調べて回ったところ、以下の情報が見つかりました。


  • El CapitanではOpenSSLヘッダが提供されなくなっている

  • Homebrewでopensslをインストールし、brew link openssl --forceのコマンドを実行すると良い

opensslはHomebrewで最新のものをインストール済みの環境でした。

brew link 〜のコマンドを実行しても、残念ながらエラーは変わりません。


解決策

.bash_profile に以下のパスを追加したところ、コンパイルが通るようになりました。


.bash_profile

export PATH=/usr/local/opt/openssl/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$LD_LIBRARY_PATH
export CPATH=/usr/local/opt/openssl/include:$CPATH
export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include
export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH

なお、パスを追加していても、brew link openssl --forceを実行していない環境では、以下のエラーが発生してコンパイルに失敗しました。


コマンド

$ make

# 省略
Undefined symbols for architecture x86_64:
"_ERR_remove_thread_state", referenced from:
_internal_idevice_deinit in idevice.o
_idevice_connection_enable_ssl in idevice.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libimobiledevice.la] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

brew link 〜の実行とパスの追加の両方が必要だったようです。

brew link openssl --forceは、現在は使えなくなっています。


コマンド

$ brew link openssl --force

Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib


環境


  • Mac OS X 10.11.6 El Capitan

  • MacBook Pro (Retina, 13-inch, Late 2013)

  • Xcode 8.2.1

  • Homebrew 1.2.0 (git revision 922c8; last commit 2017-05-02)

  • OpenSSL 1.0.2k 26 Jan 2017

  • libimobiledevice-1.2.0