web-dev-qa-db-ja.com

OS X El Capitanでlibsslを使用してCプログラムをコンパイルしますか?

Libsslを使用した簡単なCプログラムがあります。

Linuxでは、openssl-devパッケージをインストールし、次の行でプログラムをコンパイルしました。

gcc test_libssl.c -o test_libssl -lcrypto -lssl

今私は私のMacで同じことをしたいと思います。同じ行の結果:

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

Openssl(openssl-devは機能しませんでした)をbrew install openssl

これは私に与えました:

...
==> opensslのインストール
==>ダウンロード中 https://www.openssl.org/source/openssl-1.0.2a.tar.gz curl:(22)要求されたURLがエラーを返しました:404不可見つかった

関連SO質問 が見つかりませんでした。

私も試しました

brew info openssl

と知らされた

この式は樽のみです。 Mac OS Xはすでにこのソフトウェアを提供しており、並行して別のバージョンをインストールすると、あらゆる種類の問題が発生する可能性があります。

AppleはOpenSSLの使用を非推奨にして、独自のTLSおよび暗号化ライブラリを支持します

OS Xでlibsslを使用するCプログラムプログラムをコンパイルできるようにするには、何をしなければなりません/インストールしなければなりませんか?

または、それは最初の場所で悪い考えですか(上記の警告が与えられた場合)?




更新:

Opensslをbrewを使用してインストールしました。これが問題だったかどうかはわかりませんが、brewを更新しました。醸造所のアドバイスを受ける

/ usr/localの所有権と権限をユーザーアカウントに戻す必要があります。 Sudo chown -R $(whoami):admin/usr/local

および this 問題が考慮されます。

次に、@ Alex Reynoldsのアドバイスに従って、正常にコンパイルしました

gcc test_libssl.c -o test_libssl -lssl -lcrypto -L/usr/local/opt/openssl/lib -I/usr/local/opt/openssl/include
15
langlauf.io

El Capitan(10.11.1)にHomebrewをインストールし、明らかな悪影響を与えずにOpenSSLの現在のバージョンをインストールしました。

$ uname -a
Darwin hostname.local 15.0.0 Darwin Kernel Version 15.0.0: Sat Sep 19 15:53:46 PDT 2015; root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64

$ brew info openssl
openssl: stable 1.0.2d (bottled)
OpenSSL SSL/TLS cryptography library
https://openssl.org/

This formula is keg-only.
Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

/usr/local/Cellar/openssl/1.0.2d_1 (464 files, 17M)
  Built from source
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/openssl.rb
==> Dependencies
Build: makedepend ✔
==> Options
--universal
    Build a universal binary
--without-check
    Skip build-time tests (not recommended)
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, 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

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include

アプリのビルドステートメントに提案されているフラグを追加してみましたか?アプリのmakefileまたはその他のビルドステートメントを編集し、brew install opensslの後にそれらのエントリを追加できます。これは、コンパイラが必要なライブラリとヘッダーファイルを見つけてリンクするのに役立ちます。

すべてがそこにあるように見えます。ヘッダーは次のとおりです。

$ ls -al /usr/local/opt/openssl/include/openssl/
total 3688
drwxr-xr-x  77 alexpreynolds  admin    2618 Aug 24 13:46 .
drwxr-xr-x   3 alexpreynolds  admin     102 Aug 24 13:46 ..
-rw-r--r--   1 alexpreynolds  admin    6182 Aug 24 13:46 aes.h
-rw-r--r--   1 alexpreynolds  admin   63142 Aug 24 13:46 asn1.h
-rw-r--r--   1 alexpreynolds  admin   24435 Aug 24 13:46 asn1_mac.h
-rw-r--r--   1 alexpreynolds  admin   34475 Aug 24 13:46 asn1t.h
-rw-r--r--   1 alexpreynolds  admin   38566 Aug 24 13:46 bio.h
-rw-r--r--   1 alexpreynolds  admin    5351 Aug 24 13:46 blowfish.h
...

静的および動的ライブラリ:

$ ls -al /usr/local/opt/openssl/lib
total 11664
drwxr-xr-x  10 alexpreynolds  admin      340 Aug 24 13:46 .
drwxr-xr-x  11 alexpreynolds  admin      374 Aug 24 13:46 ..
drwxr-xr-x  14 alexpreynolds  admin      476 Aug 24 13:46 engines
-r--r--r--   1 alexpreynolds  admin  1861780 Aug 24 13:46 libcrypto.1.0.0.dylib
-r--r--r--   1 alexpreynolds  admin  3206344 Aug 24 13:46 libcrypto.a
lrwxr-xr-x   1 alexpreynolds  admin       21 Aug 24 13:46 libcrypto.dylib -> libcrypto.1.0.0.dylib
-r--r--r--   1 alexpreynolds  admin   364144 Aug 24 13:46 libssl.1.0.0.dylib
-r--r--r--   1 alexpreynolds  admin   524424 Aug 24 13:46 libssl.a
lrwxr-xr-x   1 alexpreynolds  admin       18 Aug 24 13:46 libssl.dylib -> libssl.1.0.0.dylib
drwxr-xr-x   5 alexpreynolds  admin      170 Aug 24 13:46 pkgconfig
11
Alex Reynolds

@Alex Reynoldsの答えは正しいですが、他の誰かのプログラムをコンパイル/構成したい場合は、事前にこれを実行できます。

export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include