【问题标题】:GCC equivalent of /GS, /GL, /Gy, /Oi, /MD in MSVC [closed]MSVC 中 /GS、/GL、/Gy、/Oi、/MD 的 GCC 等效项[关闭]
【发布时间】:2019-08-05 14:52:16
【问题描述】:

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

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

【问题讨论】:

  • The GCC documentation 可能会有所帮助。
  • 对于使用 GCC 的“整个程序优化”,请查找 LTO(“链接时间优化”)。
  • @Someprogrammerdude。感谢您提供材料。
  • @JesperJuhl,这真的很有帮助。谢谢

标签: c++ linux visual-studio gcc


【解决方案1】:

我们开始吧:

  • /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 用于额外的安全强化)。

【讨论】:

  • 非常感谢。这正是我正在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2019-02-01
  • 2014-11-14
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2012-01-10
相关资源
最近更新 更多