如何在OS X上使用gcc或clang构建OpenSSL

时间:2016-10-03 11:24:33

标签: macos gcc openssl clang

我正在OS X上构建OpenSSL。我想了解更多关于修改构建设置的信息,如Wiki中所述。

我按如下方式配置构建:

./Configure darwin64-x86_64-cc
make

我如何知道这将使用哪个编译器?

Wiki有一个示例,指示如何修改构建以使用clang编译器而不是iOS 7.0 SDK下的gcc。

我想修改我的构建,以便在OS X上选择clang或gcc中的一个或另一个.Compone中的等效行是:

"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 个答案:

答案 0 :(得分:0)

  

我如何知道这将使用哪个编译器?

在现代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的集成汇编程序,它会带来一系列破碎错误。

  

我想修改我的构建以在OS X上选择clang或gcc中的一个或另一个...

您可以交换您选择的编译器,但您需要使用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编译器,并且不要使用由符号链接创建的伪造的。

还有一个关于配置无法在执行CC=/opt/local/bin/gcc ./Configure ...之类的事情时进行配置的错误报告您获得了像linux-x86_64-/opt/local/bin/gcc这样的三元组,后者在此过程中被拒绝。