在OS X El Capitan上使用libssl编译C程序?

时间:2015-11-04 19:55:30

标签: c macos gcc homebrew libssl

我有一个使用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

我发现related SO question没有回答。

我也试过

brew info openssl

并获悉

  

此公式仅限小桶。   Mac OS X已经提供此软件并在其中安装另一个版本   并行会造成各种麻烦。

     

Apple已弃用OpenSSL,转而使用自己的TLS和加密库

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

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




更新:

我使用brew安装了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

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:1)

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

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