#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
, который отклоняется позже в процессе.