C++ 生成32位OpenSSL FIP(nmake f ms\ntdll.mak):宏中的非法字符

C++ 生成32位OpenSSL FIP(nmake f ms\ntdll.mak):宏中的非法字符,c++,windows,openssl,fips,C++,Windows,Openssl,Fips,我的目标是在启用FIPS的情况下,以32位构建OpenSSL(OpenSSL-1.0.2n)共享库(DLL)。按照openssl.org()规定的过程,在构建FIPS容器之后,我做了: perl配置VC-WIN32 fips——使用fipslibdir=C:\usr\local\ssl\fips-2.0 ms\do_\nasm nmake-f ms\ntdll.mak 最后一个(nmake f ms\ntdll.msk)抛出此错误: makefile(243):致命错误U1001:语法错误:宏停

我的目标是在启用FIPS的情况下,以32位构建OpenSSL(OpenSSL-1.0.2n)共享库(DLL)。按照openssl.org()规定的过程,在构建FIPS容器之后,我做了:

  • perl配置VC-WIN32 fips——使用fipslibdir=C:\usr\local\ssl\fips-2.0
  • ms\do_\nasm
  • nmake-f ms\ntdll.mak
  • 最后一个(nmake f ms\ntdll.msk)抛出此错误:

    makefile(243):致命错误U1001:语法错误:宏停止中的非法字符“{”

    指导?这很棘手,因为OpenSSL FIPS说明非常具体,没有修改MAKE文件以保持FIPS兼容。有点让我束手无策

    x86 VS2017命令提示符下的完整列表(在管理模式下运行):

    看起来这是在GitHub上的OpenSSL的早期版本中注意到的,但没有发布解决方案…问题刚刚结束,我不知道该怎么办:

    我在这里将ntdll.mak文件上载到google drive:

    第243行(没有真正的帮助,但这里有):


    这并不是说这很有帮助,但有问题的字符在OpenSSL源代码根目录下的makefile中。我将从第241行开始粘贴:

        ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)'        \
        PERLASM_SCHEME='$(PERLASM_SCHEME)'      \
        FIPSLIBDIR='${FIPSLIBDIR}'          \
        FIPSDIR='${FIPSDIR}'                \
        FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"  \
        THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
    

    这并不是说这很有帮助,但有问题的字符在OpenSSL源代码根目录下的makefile中。我将从第241行开始粘贴:

        ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)'        \
        PERLASM_SCHEME='$(PERLASM_SCHEME)'      \
        FIPSLIBDIR='${FIPSLIBDIR}'          \
        FIPSDIR='${FIPSDIR}'                \
        FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"  \
        THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
    

    您只是在命令中的“f”前面缺少一个小破折号,确切的命令应该是:

    nmake -­f ms\ntdll.mak
    
    由于缺少破折号,实际上是在顶级目录中的Makefile上调用nmake,该目录碰巧存在,但与nmake不兼容,因此出现了错误


    我发现了这一点,因为我在尝试在Windows上构建OpenSSL时收到了相同的错误消息,而在我的情况下,我只是在没有任何参数的情况下调用nmake(因为我没有先阅读INSTALL.W32文件…)

    您只是在命令中的“f”之前缺少了一个小破折号,确切的命令应该是:

    nmake -­f ms\ntdll.mak
    
    由于缺少破折号,实际上是在顶级目录中的Makefile上调用nmake,该目录碰巧存在,但与nmake不兼容,因此出现了错误


    我发现了这一点,因为我在尝试在Windows上构建OpenSSL时收到了相同的错误消息,在我的例子中,我只是在没有任何参数的情况下调用nmake(因为我没有先阅读INSTALL.W32文件…)

    也许可以运行预处理器,看看所有这些宏都扩展到什么地方并分析代码?我不太确定该怎么做,因为我对构建过程了解得不够。我会研究一下。我能够创建32位共享库(DLL)有一次。后来我也遇到了同样的错误。也许可以运行一个预处理器,看看所有这些宏都扩展到了什么地方,然后分析代码?不太确定该怎么做,因为我对构建过程了解得不够。我会研究它。我能够创建32位共享库(DLL)有一次。后来我又犯了同样的错误。这不是答案,而是一条评论。评论需要遵守最低的声誉要求,你可以在这里找到更多信息:@Router Gray谢谢你的想法(回答或评论,或者我们想叫它什么)这让我觉得我可能没有正确设置fips环境变量。我假设因为参数在命令中,所以我不需要设置环境变量。可能makefile在这两个位置都需要文件夹路径。我会尽快尝试,看看这是否解决了问题。这不是答案,而是注释。注释是根据最低声誉要求,您可以在此处了解更多信息:@Router Gray感谢您的想法(回答或评论或我们希望称之为的任何内容)这让我觉得我可能没有正确设置fips环境变量。我假设因为参数在命令中,所以我不需要设置环境变量。可能makefile在这两个位置都需要文件夹路径。我会尽快尝试,看看这是否解决了问题。