在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 

我尝试通过brew install openssl安装openssl(openssl-dev没有工作)和home-brew

这给了我:


==>安装openssl
==>正在下载https://www.openssl.org/source/openssl-1.0.2a.tar.gz curl:(22)请求的url返回错误:404 Not Found

我找到了一个没有答案的相关SO问题 。

我也试过了

 brew info openssl 

并得知

这个公式只是keg。 Mac OS X已经提供此软件并且并行安装另一个版本会造成各种麻烦。

Apple不赞成使用OpenSSL来支持自己的TLS和加密库

为了能够在OS X上编译libssl-C程序,我需要做什么/安装?

或者,首先是一个坏主意(鉴于上面的警告)?

更新:

我用brew安装了openssl。 我不确定这是不是问题,但我更新了brew。 采取brew的建议

您应该将/ usr / local的所有权和权限更改回您的用户帐户。 sudo chown -R $(whoami):admin / usr / local

并考虑到这个问题。

然后,按照@Alex Reynolds的建议,我成功编译了它

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

我在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 

您是否尝试将其建议的标志添加到应用程序的构建语句中? 您可以在brew install openssl之后编辑应用程序的makefile或其他构建语句并添加这些条目。 这可以帮助您的编译器查找并链接它所需的库和头文件。

看起来一切都在那里。 这是标题:

 $ 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 

@Alex Reynolds的答案是正确的,但是如果你想编译/配置其他人的程序,那么你可以事先运行它:

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