web-dev-qa-db-fra.com

Compiler des programmes C en utilisant libssl sur OS X El Capitan?

J'ai un programme simple en utilisant libssl.

Sous Linux, j'ai installé le paquet openssl-dev et compilé le programme avec la ligne suivante:

gcc test_libssl.c -o test_libssl -lcrypto -lssl

Maintenant, j'aimerais faire la même chose sur mon Mac. La même ligne a abouti à:

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

J'ai essayé d'installer openssl (openssl-dev ne fonctionnait pas) avec home-brew via brew install openssl

Cela m'a donné:

...
==> Installation de openssl
==> Téléchargement https://www.openssl.org/source/openssl-1.0.2a.tar.gz curl: (22) L'URL demandée a renvoyé l'erreur: 404 Introuvable

J'ai trouvé une question liée à SO sans réponse.

J'ai aussi essayé

brew info openssl

et a été informé que

Cette formule est réservée aux fûts . Mac OS X fournit déjà ce logiciel et installe une autre version dans Parallèle peut causer toutes sortes de problèmes.

Apple a déconseillé d'utiliser OpenSSL au profit de ses propres bibliothèques TLS et crypto

Que dois-je faire/installer pour pouvoir compiler des programmes C utilisant libssl sur OS X?

Ou est-ce une mauvaise idée la première place (compte tenu de l'avertissement ci-dessus)?




METTRE À JOUR:

J'ai installé l'OpenSL en utilisant une infusion. Je ne suis pas sûr que ce soit le problème, mais j'ai mis à jour le breuvage.

Vous devriez probablement changer la propriété et les permissions de /usr/local Retour à votre compte d'utilisateur . Sudo chown -R $ (whoami): admin/usr/local

et this issue in account.

Puis, suivant les conseils de @Alex Reynolds, je l’ai compilé avec succès avec

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

J'ai installé Homebrew sur El Capitan (10.11.1) et ai installé une version actuelle d'OpenSSL sans aucun effet apparent apparent:

$ 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

Avez-vous essayé d'ajouter les indicateurs suggérés dans la déclaration de build de votre application? Vous pouvez modifier la makefile ou une autre instruction de construction de votre application et ajouter ces entrées, après un brew install openssl. Cela peut aider votre compilateur à trouver et à lier les fichiers de bibliothèque et d’en-tête dont il a besoin.

On dirait que tout est là. Voici les en-têtes:

$ 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
...

Et les bibliothèques statiques et dynamiques:

$ 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

La réponse de @Alex Reynolds est correcte, mais si vous voulez compiler/configurer le programme de quelqu'un d'autre, vous pouvez exécuter ceci au préalable:

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