gpt4 book ai didi

c++ - GCC 相当于 MSVC 中的/GS、/GL、/Gy、/Oi、/MD

转载 作者:太空宇宙 更新时间:2023-11-04 04:39:29 24 4
gpt4 key购买 nike

我将一个在Microsoft Visual Studio C++ 2017(Windows环境下)开发的程序移植到GCC(Linux环境下)。我不太熟悉 GCC 编译器。

GCC 是否具有/GS(缓冲区安全检查)、/GL(启用整个程序优化)和/Gy(启用函数级链接)、/Oi(生成内部函数)、/MD(使用 MSVCRT.lib 创建多线程 DLL)等价的编译器选项?谢谢。

最佳答案

我们开始:

  • /GS大致相当于-fstack-protector-strong -fstack-clash-protection -D_FORTIFY_SOURCE=2。它还需要优化(例如,-O2-O3),这在 GCC 中默认是禁用的。 -fstack-clash-protection 需要目标支持才能正常工作,而 Arm 上可能仍然缺乏这一点。对于此类目标,最好避免使用它。
  • /GL或多或少相当于 -flto ,尽管所需的调整有很大不同。使用链接时优化 (LTO) 时,您应该在链接器调用中重复所有编译器标志。
  • /Gy相当于 -ffunction-sections -Wl,--gc-sections .
  • /Oi-O2 和大多数优化选项暗示。
  • /MD在当代 GNU/Linux 上毫无意义;没有假设进程不是多线程的编译器优化。多线程应用程序需要与-lpthread链接。

检查您的 Linux 发行版是否有其他构建标志并对其进行镜像可能是有意义的(例如,-Wl,-z,now 用于额外的安全强化)。

关于c++ - GCC 相当于 MSVC 中的/GS、/GL、/Gy、/Oi、/MD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57361083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com