【问题标题】:How to build OpenSSL using gcc or clang on OS X如何在 OS X 上使用 gcc 或 clang 构建 OpenSSL
【发布时间】:2017-02-11 07:55:49
【问题描述】:

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

我正在按如下方式配置构建:

./Configure darwin64-x86_64-cc
make

我怎么知道这将使用哪个编译器?

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

我想修改我的构建以在 OS X 上选择 clang 或 gcc 中的一个。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",

我需要改变什么?

【问题讨论】:

    标签: macos gcc openssl clang


    【解决方案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 的集成汇编器,它带来了自己的一组严重错误。


    我想修改我的构建以在 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 ... 之类的操作时,Configure 无法配置您会得到像 linux-x86_64-/opt/local/bin/gcc 这样的三元组,但在此过程中稍后会被拒绝。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 2014-09-04
      • 2011-05-04
      相关资源
      最近更新 更多