为什么我尝试使用Visual Studio工具在Windows上构建OpenSSL失败?

时间:2017-05-07 18:13:22

标签: windows visual-studio openssl

我正在尝试构建openssl库。我克隆了一个来自GitHub的回购https://github.com/openssl/openssl

现在使用"命令行" Visual Studio 2013.此命令行:enter image description here

我使用下一个命令: cd C:\ Programs \ openssl - 转到openssl repo

的文件夹

perl配置VC-WIN64A --prefix = C:\ Programs \ openssl-build - 实际上,我不知道这个命令是什么,但所有手册都说它需要。此命令具有下一个输出

enter image description here

并且"是的,我有Perl'当然我安装了Perl'"

下一个(也是最后一个)命令,我写的只是简单的" nmake"。最后因为这个命令的输出有一些"致命错误",这不允许我继续安装enter image description here

如您所见,主要错误是"致命错误LNK1112:模块机器类型' X86'与目标机器类型冲突' x64'"。据我所知,参数机器类型可以在Microsoft Visual Studio GUI中的Solution属性中提供,但是如何从命令行设置它我不知道,而openssl并不代表Microsoft Visual Studio Solution,它可以由MS Visual Studio打开。

所以,也许有人知道如何从命令行设置这个属性,或者,这个错误可能不依赖于此而且有人知道如何解决这个问题。

我希望得到你的帮助。拜托,伙计们,第二天我试着解决这个问题,你是我最后的机会!!

2 个答案:

答案 0 :(得分:1)

这就是我所做的。首先,我打开了64位版本的命令提示符:

$ cl
Microsoft (R) C/C++ Optimizing Compiler Version 18.00.40629 for x64

然后,我下载了current 1.1 release tarball。除非您实际开发OpenSSL并且能够调试开发版本中的问题,否则没有理由搞乱开发版本。

$ curl -O https://www.openssl.org/source/openssl-1.1.0e.tar.gz
$ tar xvf openssl-1.1.0e.tar.gz
$ cd openssl-1.1.0e

此时, 我读了INSTALL ,我建议你也这样做,而不是说“我不知道这个命令是什么意思做的”。阅读INSTALL后,您将知道命令实际执行的操作。

$ perl Configure --prefix=%TEMP%\openssl VC-WIN64A
$ nmake

这没有给我任何错误,所以我继续发布

$ nmake test

给了我

Microsoft (R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        set SRCTOP=.
        set BLDTOP=.
        set PERL=C:\opt\perl\5.24.1\bin\perl.exe
        set OPENSSL_DEBUG_MEMORY=on
        "C:\opt\perl\5.24.1\bin\perl.exe" ".\test\run_tests.pl"
test\recipes\01-test_abort.t ............ ok
test\recipes\01-test_sanity.t ........... ok
test\recipes\01-test_symbol_presence.t .. ok
...
test\recipes\90-test_sslapi.t ........... ok
test\recipes\90-test_threads.t .......... ok
test\recipes\90-test_v3name.t ........... ok
All tests successful.
Files=91, Tests=433, 100 wallclock secs ( 0.66 usr +  0.27 sys =  0.92 CPU)
Result: PASS

此时,我非常肯定nmake install也会有效,但我不想替换我系统上的任何内容。

您没有与Perl或编程相关的问题。

答案 1 :(得分:-2)

我认为您忘记运行配置脚本生成的ms\do_ms.bat文件。

以下是我用于在PC上构建OpenSSL的脚本。

先决条件:

  1. 在PC上安装Perl。我想我使用过ActivePerl,但我怀疑任何版本都可以。
  2. 安装NASM。 http://www.nasm.us/
  3. 安装Visual Studio
  4. 然后将以下脚本保存到名为bldenv.cmd

    的文件中
    REM ######################################
    REM MODIFY THESE VARIABLES BELOW TO POINT TO YOUR NASM, PERL, and VISUAL STUDIO PATHS
    REM Base Variables
    SET _BLD_NASM=c:\nasm\bin
    SET _BLD_PERL=c:\perl64\bin
    SET _BLD_VSTUDIO=c:\vstudio
    
    REM ######################################
    
    
    Echo Initializing the Visual Studio Build environment
    call %_BLD_VSTUDIO%\VC\vcvarsall.bat x86
    
    Echo adding Perl to Path
    set PATH=%_BLD_PERL%;%PATH%
    
    Echo Adding NASM to Path
    set PATH=%_BLD_NASM%;%PATH%
    
    echo #######################################
    echo Build environment is ready
    echo TO BUILD:
    echo     perl Configure VC-WIN32    (or perl Configure debug-VC-WIN32)
    echo     ms\do_nasm.bat
    echo     nmake -f ms\ntdll.mak      (or nmake -f ms\nt.mak for a static lib)
    echo #######################################
    

    然后建立:

    1. 打开一个干净的命令shell窗口。优选地,您的PATH环境已经“干净”并且不包含Visual Studio。此外,您的环境不应设置任何LIBINCLUDE值。 (在命令提示符下键入set。如果没有看到LIB或INCLUDE的条目,那就好了。

    2. cd到你的openssl源目录。将上面的bldenv.cmd脚本复制到此目录。

      运行上面的脚本(bldenv.cmd)

      然后运行:ms\do_nasm.bat

      后跟:nmake -f ms\ntdll.mak

    3. 应该这样做。