【问题标题】:Building openSSL for Windows x64为 Windows x64 构建 openSSL
【发布时间】:2019-02-14 16:45:43
【问题描述】:

基本上这应该很简单,但由于某种神奇的原因,结果库是Win32 而不是x64

在调查过程中,我发现第一步 Configure 失败了:

perl Configure VC-WIN64A no-asm enable-static-engine --prefix=x64\Release

此打印(完整复制粘贴):

Configuring for VC-WIN64A
    no-asm          [option]   OPENSSL_NO_ASM
    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=1
CC            =cl
CFLAG         =-DOPENSSL_THREADS  -DDSO_WIN32 -W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE
EX_LIBS       =
CPUID_OBJ     =mem_clr.o
BN_ASM        =bn_asm.o
EC_ASM        =
DES_ENC       =des_enc.o fcrypt_b.o
AES_ENC       =aes_core.o aes_cbc.o
BF_ENC        =bf_enc.o
CAST_ENC      =c_enc.o
RC4_ENC       =rc4_enc.o rc4_skey.o
RC5_ENC       =rc5_enc.o
MD5_OBJ_ASM   =
SHA1_OBJ_ASM  =
RMD160_OBJ_ASM=
CMLL_ENC      =camellia.o cmll_misc.o cmll_cbc.o
MODES_OBJ     =
ENGINES_OBJ   =
PROCESSOR     =
RANLIB        =true
ARFLAGS       =
PERL          =perl
SIXTY_FOUR_BIT mode
DES_INT used
RC4_CHUNK is unsigned long long

Configured for VC-WIN64A.

注意CFLAG 包含Win32 的选项。这很不寻常,我不知道出了什么问题以及如何解决这个问题。

我的构建脚本或多或少看起来像这样(最初它是为Win32 构建的,我做了修改以支持x64):

REM setup some variables
call commonSetup.cmd

set PREFIX=x64\Release
set PLATFORM=VC-WIN64A
set MS_CONF=do_win64a
set EXT=

pushd %THIRD_PARTY_DIR_BASE%\openssl

echo PREFIX=%PREFIX% PLATFORM=%PLATFORM% MS_CONF=%MS_CONF% EXT=%EXT%

perl Configure %PLATFORM% no-asm enable-static-engine --prefix=%PREFIX%

call ms\%MS_CONF%

perl -i.bak -pe "s/([-\/])Zi /\1Z7 /g" ms/nt.mak

mkdir inc32\openssl
nmake -f ms\nt.mak

REM jom -f ms\nt.mak AS=ml64 -j %PROCN%
nmake -f ms\nt.mak install

rmdir /s/q inc32
rmdir /s/q out32%EXT%
rmdir /s/q tmp32%EXT%

任何帮助将不胜感激。

OpenSSL 版本:1.0.2p14 Aug 2018

将我的项目的其他依赖项构建到x64 平台时,我没有这个问题。

我找到了this question with exactly same issue,但那里的答案与我的问题不符。我的 VS 工具配置正确(VS2017)。我必须使用VS,并且使用它没有问题(nmake 有效)。

【问题讨论】:

  • 如果你继续构建,你真的得到一个 32 位库吗?尽管我在 C 标志中一些已定义符号的名称中看到“WIN32”,但我认为这些符号中的任何一个都不能控制构建库的目标体系结构。
  • 是的。我正在检查dumpbin /headers %LIB_TO_CHECK% | find machine 的结果
  • @JohnBollinger 感谢您的帮助。这给了我一个提示,我可以在其他步骤中尝试搜索问题。

标签: c configuration openssl


【解决方案1】:

好的,我终于找到了解决方案。
我在other SO ansear找到了。

基本上nmake 必须重新配置以构建x64(openSSL 配置不是问题)使用这个:

VsDevCmd.bat -host_arch=amd64 -arch=amd64

在之前的尝试之后,nmake -f ms\nt.mak clean 必须被调用,这样上面才能生效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2020-08-12
    相关资源
    最近更新 更多