Как создать OpenSSL с использованием gcc или clang в OS X

#macos #gcc #openssl #clang

#macos #gcc #openssl #лязг #clang

Вопрос:

Я создаю OpenSSL в OS X. Я хотел бы больше узнать об изменении параметров сборки, как описано в Вики.

Я настраиваю сборку следующим образом:

 ./Configure darwin64-x86_64-cc
make
  

Как мне узнать, какой компилятор будет использоваться?

В Вики есть пример, который показывает, как изменить сборку, чтобы использовать компилятор clang, а не gcc, в iOS 7.0 SDK.

Я хотел бы изменить свою сборку, чтобы выбрать один или другой из clang или gcc в OS X. Эквивалентная строка в Configure:

 "darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4-[^:] //;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.$(SHLIB_MAJOR).$(SHLIB_MINOR).dylib",
  

Что мне нужно изменить?

Ответ №1:

Как мне узнать, какой компилятор будет использоваться?

В современной OS X вы обычно получаете тот или иной вариант Clang:

 $ g   --version
Configured with: --prefix=/Applications/Xcode-5_1.app/Contents/Developer/usr 
--with-gxx-include-dir=/usr/include/c  /4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin12.6.0
  

И даже:

 $ c   --version
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin12.6.0
  

Apple Clang 5.1 — это LLVM Clang 3.4. Макросы препроцессора __clang__ , __clang_major__ и __clang_minor__ у Apple и LLVM разные значения. Это настоящая боль, поскольку вы работаете над ошибками Clang. Вам также может потребоваться обнаружить встроенный ассемблер Clang, который вносит свой собственный набор сокрушительных ошибок.


Я хотел бы изменить свою сборку, чтобы выбрать один или другой из clang или gcc в OS X…

Вы можете заменить компилятор на свой выбор, но вам нужно использовать config , а не Configure . Ниже приведен компилятор MacPort GCC 6.0. Brew, вероятно, похож (но я его не использую):

 $ /opt/local/bin/gcc-mp-6 --version
gcc-mp-6 (MacPorts gcc6 6.1.0_0) 6.1.0
Copyright (C) 2016 Free Software Foundation, Inc.

$ CC=/opt/local/bin/gcc-mp-6 KERNEL_BITS=64 ./config 
Operating system: i686-apple-darwinDarwin Kernel Version 12.6.0: Wed Mar 18 16:23:48 PDT 2015;
root:xnu-2050.48.19~1/RELEASE_X86_64
Configuring for darwin64-x86_64-cc
    no-ec_nistp_64_gcc_128 [default]  OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir)
    no-gmp          [default]  OPENSSL_NO_GMP (skip dir)
    no-jpake        [experimental] OPENSSL_NO_JPAKE (skip dir)
    no-krb5         [krb5-flavor not specified] OPENSSL_NO_KRB5
    no-libunbound   [experimental] OPENSSL_NO_LIBUNBOUND (skip dir)
    no-md2          [default]  OPENSSL_NO_MD2 (skip dir)
    no-rc5          [default]  OPENSSL_NO_RC5 (skip dir)
    no-rfc3779      [default]  OPENSSL_NO_RFC3779 (skip dir)
    no-sctp         [default]  OPENSSL_NO_SCTP (skip dir)
    no-shared       [default] 
    no-ssl-trace    [default]  OPENSSL_NO_SSL_TRACE (skip dir)
    no-ssl2         [default]  OPENSSL_NO_SSL2 (skip dir)
    no-store        [experimental] OPENSSL_NO_STORE (skip dir)
    no-unit-test    [default]  OPENSSL_NO_UNIT_TEST (skip dir)
    no-weak-ssl-ciphers [default]  OPENSSL_NO_WEAK_SSL_CIPHERS (skip dir)
    no-zlib         [default] 
    no-zlib-dynamic [default] 
IsMK1MF=0
CC            =/opt/local/bin/gcc-mp-6
...
  

Что мне нужно изменить?

Измените способ настройки. Используйте config вместо Configure . Также используйте настоящий компилятор GCC, а не поддельный, созданный символической ссылкой.

Где-то также есть сообщение об ошибке о невозможности настройки Configure при выполнении чего-то подобного CC=/opt/local/bin/gcc ./Configure ... , вы получаете триплет linux-x86_64-/opt/local/bin/gcc , который отклоняется позже в процессе.