【问题标题】:Does Windows have a __declspec equivalent to Unix GCC's __attribute__((weak))?Windows 是否有与 Unix GCC 的 __attribute__((weak)) 等效的 __declspec?
【发布时间】:2012-09-05 22:55:06
【问题描述】:

我想导入一些 C 代码但覆盖它的 main() 函数。我可以在 Unix 中通过在 C 代码的主要声明前加上 __attribute__((weak)) 来做到这一点,但是,这不会在 Windows 中编译,因为 Strawberry Perl 的 GCC 和 MinGW 的 GCC 都不能识别 __attribute__((weak))

在线阅读文档,__declspec 似乎功能相似。是否有一个 __declspec 相当于 Unix GCC 的 __attribute__((weak)) 宏?

这是我发布的earlier 问题的更具体版本。

【问题讨论】:

  • 为什么不改一下EXE入口点名呢?
  • 在 MSVC 链接器选项中,您可以将入口点名称更改为其他名称,并以不同的方式命名您的 REAL 主函数。
  • 您能帮我在 Makefile 或代码本身中执行此操作吗?我不想强制代码必须使用 MSVC++。希望我们可以让它在 Cygwin 中工作。
  • 在link.exe中,它是/ENTRY。 msdn.microsoft.com/en-us/library/f9t8842e(v=vs.80).aspx 我确信 makefile 可以通过它,虽然我不是 makefile 方面的专家。
  • 在编译 scriptedmain.exe、编译 test.exe 时,我是否应该提供 /entry

标签: c windows unix macros mingw


【解决方案1】:

如果您愿意使用 MSVC,我认为还有另一种方法可以使用。

/* * pWeakValue 必须是一个外部 const 变量,它会被别名为 * pDefaultWeakValue 如果不存在真正的用户定义,感谢 * 替代名称指令。 */ extern const char * pWeakValue; extern const char * pDefaultWeakValue = NULL; #pragma 注释(链接器,“/alternatename:_pWeakValue=_pDefaultWeakValue”)

请参阅this old SO answer 了解其他一些选项。

【讨论】:

  • 我需要弱化main()函数,而不是extern const变量。
【解决方案2】:

还有__declspec(selectany)

【讨论】:

    猜你喜欢
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2019-03-23
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2023-02-11
    相关资源
    最近更新 更多