Компиляция программ C с использованием libssl в OS X El Capitan?

У меня есть простая программа на C, использующая libssl.

В 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 Not Found

Я нашел связанный с SO вопрос без ответа.

я тоже пробовал

brew info openssl

и получил информацию, что

Эта формула предназначена только для бочонков. Mac OS X уже предоставляет это программное обеспечение, и параллельная установка другой версии может вызвать всевозможные проблемы.

Apple отказалась от использования OpenSSL в пользу собственных TLS и криптографических библиотек.

Что мне нужно сделать / установить, чтобы иметь возможность компилировать libssl-программы с использованием C-программ в OS X?

Или, во-первых, это плохая идея (учитывая предупреждение выше)?




ОБНОВЛЕНИЕ:

Я установил 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

person gogo_gorilla    schedule 04.11.2015    source источник
comment
Это устарело по какой-то причине... Вы должны создать код, специфичный для OSX, в своем приложении, используя фреймворки Apple (например, libcrypto)...   -  person Macmade    schedule 04.11.2015
comment
@Macmade libcrypto является частью OpenSSL. Прямо эквивалентной нативной библиотеки не существует; ближайший эквивалент (который не очень близок) — CommonCrypto.   -  person    schedule 05.11.2015


Ответы (2)


Я установил Homebrew на El Capitan (10.11.1) и установил текущую версию 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
person Alex Reynolds    schedule 04.11.2015

Ответ @Alex Reynolds правильный, но если вы хотите скомпилировать/настроить чужую программу, вы можете запустить это заранее:

export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include
person Trần Việt Hoàng    schedule 06.04.2018
comment
да, добавлю для пакета с шагом ./configure, мне тоже пришлось сделать: export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig - person John Fowler; 27.09.2018