webentwicklung-frage-antwort-db.com.de

C-Programme mit libssl unter OS X El Capitan kompilieren?

Ich habe ein einfaches C-Programm, das libssl verwendet.

Unter Linux habe ich das Paket openssl-dev installiert und das Programm mit der folgenden Zeile kompiliert:

gcc test_libssl.c -o test_libssl -lcrypto -lssl

Nun möchte ich das auch auf meinem Mac machen. Die gleiche Zeile ergab:

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

Ich habe versucht, openssl (openssl-dev hat nicht funktioniert) mit Home-Brew über brew install openssl zu installieren.

Das gab mir:

...
==> openssl installieren
==> Herunterladen https://www.openssl.org/source/openssl-1.0.2a.tar.gz curl: (22) Die angeforderte URL hat einen Fehler zurückgegeben: 404 Not Found

Ich habe eine verwandte SO - Frage gefunden ohne Antwort.

Ich habe es auch versucht

brew info openssl

und habe das informiert

Diese Formel ist nur Faß. Mac OS X bietet diese Software bereits an und installiert eine andere Version in Parallel kann alle Arten von Problemen verursachen.

Apple hat die Verwendung von OpenSSL zugunsten seiner eigenen TLS- und Kryptobibliotheken abgelehnt

Was muss ich tun/installieren, um libssl-using-C-Programme unter OS X kompilieren zu können?

Oder ist es an erster Stelle eine schlechte Idee (angesichts der obigen Warnung)?




UPDATE:

Ich habe das openssl mit brew installiert. Ich bin nicht sicher, ob dies das Problem war, aber ich habe das brew aktualisiert

Sie sollten wahrscheinlich den Besitz und die Berechtigungen von /usr/local.__ ändern. zurück zu Ihrem Benutzerkonto . Sudo chown -R $ (whoami): admin/usr/local

und diese ausgabe.

Dann, nach dem Rat von @Alex Reynolds, habe ich es erfolgreich zusammengestellt

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

Ich habe Homebrew auf El Capitan (10.11.1) installiert und eine aktuelle Version von OpenSSL ohne offensichtliche negative Auswirkungen installiert:

$ 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

Haben Sie versucht, die von der App vorgeschlagenen Flags zur Build-Anweisung Ihrer App hinzuzufügen? Sie können die makefile- oder andere Build-Anweisung Ihrer App bearbeiten und nach einem brew install openssl hinzufügen. Dies kann Ihrem Compiler dabei helfen, die benötigten Bibliotheks- und Header-Dateien zu finden und zu verknüpfen.

Sieht aus, als wäre alles da. Hier sind Header:

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

Und statische und dynamische Bibliotheken:

$ 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

Die Antwort von @Alex Reynolds ist korrekt. Wenn Sie jedoch das Programm eines anderen Benutzers kompilieren/konfigurieren möchten, können Sie das zuvor ausführen:

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