我正在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",
我需要改变什么?
答案 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
这样的三元组,后者在此过程中被拒绝。