【问题标题】:How do you correctly use /GUARD:CF MSVC flag?您如何正确使用 /GUARD:CF MSVC 标志?
【发布时间】:2021-09-29 21:42:09
【问题描述】:

我正在尝试使用/GUARD:CD MSVC 标志。来自the documentation,它说

/GUARD:CF 选项必须同时指定给编译器和链接器

文档还说/GUARD:CF 也需要设置the /DYNAMICBASE option

但是,当我尝试编译时,我看到了无法识别选项的警告:

cl -c /W3 /O2 /EHsc /MP /Zi /nologo /MD /Zi /DUNICODE /D_UNICODE /D_CRT_SECURE_NO_DEPRECATE /LD -Isrc -Iimport/include -D_WINDOWS -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL /GS /DYNAMICBASE /GUARD:CF / Fo: redacted.cpp.obj redacted.cpp cl:命令行警告 D9002:忽略未知选项“/GU” cl:命令行警告 D9002:忽略未知选项“/GD” cl : 命令行警告 D9002 : 忽略未知选项 '/G:' cl:命令行警告 D9002:忽略未知选项“/GC”

起初我以为我可能不小心在我的文本编辑器中引入了不可打印的字符,但我通过cat --show-nonprinting 验证了事实并非如此。

如何正确地将/GUARD:CF 传递给MSVC cl 编译器以便它识别它?

【问题讨论】:

    标签: c++ windows visual-studio cl


    【解决方案1】:

    您链接的页面是 MSVC 链接器选项手册的一部分。链接器选项不区分大小写。该页面有一个指向 MSVC 编译器选项手册的链接:

    使用编译源代码时 /guard:cf 选项。

    编译器选项区分大小写。正确的 cl 调用

    cl -c /W3 /O2 /EHsc /MP /Zi /nologo /MD /Zi /DUNICODE /D_UNICODE /D_CRT_SECURE_NO_DEPRECATE /LD -Isrc -Iimport/include -D_WINDOWS -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL /GS /DYNAMICBASE /guard:cf  /Fo: redacted.cpp.obj redacted.cpp
    

    只是想知道。链接器和编译器的禁用保护是不同的:/GUARD:NO/guard:cf-

    【讨论】:

      【解决方案2】:

      您链接的文档(关于 linker /GUARD 选项)颇具误导性,但如果您看起来真的很难,答案就埋在那里:

      对于编译器,命令行选项需要小写(但链接器似乎接受大写或小写)。

      所以,在cl 命令行上使用/guard:cf 而不是/GUARD:CF

      来自linked document

      当使用 /guard:cf 选项编译源代码时,...

      而且,在/guard:cf 链接到的页面上,开关只以小写形式给出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-17
        • 1970-01-01
        • 2013-07-12
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 2015-05-08
        相关资源
        最近更新 更多