at backyard

Color my life with the chaos of trouble.

Mac OS X 10.11 El Capitanでopensslのヘッダファイルが見つからないコンパイルエラーの対応方法メモ。

'openssl/md5.h' file not found

この記事は自身への備忘録であり、間違いが含まれている可能性もあるため、
もし間違いが存在していましたらコメントなどからご指摘いただけると助かります。


ソースをコンパイルしようとして下記コマンドを実行したら、

./configure && make

下記のようなエラーが出た。

fatal error: 'openssl/md5.h' file not found


opensslのヘッダを参照できていないらしい。
openssl自体は以前brewコマンドで入れていたので、パスを参照できていないということだと思う。
というか、そもそも、includeするときは、どこのパスを参照しているのだろうか?
調べる方法は下記の通り。

gcc -v 対象ソースファイル

gccコマンドに-vオプションをつけると、参照しているパスとかが見れるらしい
サンプルプログラム(test.c)を書いて、このコマンドを実行してみる。

#include<stdio.h>

int main(){
    return 0;
}
gcc -v test.c


下記は-vオプション実行時のログの一部。

#include <...> search starts here:
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.3.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)

このログを参考に

sudo ln -s /usr/local/Cellar/openssl/1.0.2e/include/openssl /usr/local/include/openssl

シンボリックリンクを作成してみたところ、エラーが解消し、成功した。

下記のサイトに助けられた。感謝。

takuya-1st.hatenablog.jp

System Integrity Protection(rootless)について

なお、上記コマンドを打った時に最初、

Operation not permitted

というエラーが出た。

これはMac OS X 10.11 El Capitan の最新機能System Integrity Protectionが原因でルート権限での編集が必要なファイルの編集ができなくなっているためのよう。
(そういえばEl Capitanがでたとき話題になっていたような、、、)
下記の記事を参考にディレクリ内での変更を可能とした。

qiita.com

追記 - 自分メモ

#include<stdio.h>
#include<openssl/md5.h>

int main(){
    return 0;
}

上記のように実際に"openssl/md5.h"をincludeしたサンプルプログラムを書いて、
コンパイルエラー解消の確認を行ったりしていた。
自身の作業メモとしてこれを残しておく。