在 OS X El Capitan 上使用 libssl 编译 C 程序?
Compiling C programs using libssl on OS X El Capitan?
我有一个使用 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 不工作)
这给了我:
...
==> Installing openssl
==> Downloading https://www.openssl.org/source/openssl-1.0.2a.tar.gz
curl: (22) The requested URL returned error: 404 Not Found
我找到一个 related SO question 没有答案。
我也试过了
brew info openssl
并得知
This formula is keg-only.
Mac OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.
Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries
为了能够在 OS X 上编译使用 libssl 的 C 程序程序,我必须做什么/安装什么?
或者,首先是个坏主意(考虑到上面的警告)?
更新:
我使用 brew 安装了 openssl。我不确定这是否是问题所在,但我更新了 brew。
采纳 brew 的建议
You should probably change the ownership and permissions of /usr/local
back to your user account.
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
我在 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
之后添加这些条目。这可能会帮助您的编译器找到并 link 它需要的库和 header 文件。
看起来一切都在那里。这里有 headers:
$ 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 的回答是正确的,但是如果你想compile/configure 别人的程序,那么你可以运行 事先这样做:
export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include
我有一个使用 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
这给了我:
...
==> Installing openssl
==> Downloading https://www.openssl.org/source/openssl-1.0.2a.tar.gz curl: (22) The requested URL returned error: 404 Not Found
我找到一个 related SO question 没有答案。
我也试过了
brew info openssl
并得知
This formula is keg-only. Mac OS X already provides this software and installing another version in parallel can cause all kinds of trouble.
Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries
为了能够在 OS X 上编译使用 libssl 的 C 程序程序,我必须做什么/安装什么?
或者,首先是个坏主意(考虑到上面的警告)?
更新:
我使用 brew 安装了 openssl。我不确定这是否是问题所在,但我更新了 brew。 采纳 brew 的建议
You should probably change the ownership and permissions of /usr/local back to your user account. 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
我在 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
之后添加这些条目。这可能会帮助您的编译器找到并 link 它需要的库和 header 文件。
看起来一切都在那里。这里有 headers:
$ 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 的回答是正确的,但是如果你想compile/configure 别人的程序,那么你可以运行 事先这样做:
export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include