【问题标题】:clang support for exceptions on windows xp对 windows xp 上的异常的 clang 支持
【发布时间】:2013-04-27 23:42:30
【问题描述】:

我想使用 clang 进行 c++ 开发(现在是 windows,但是,linux、android 等),到目前为止,在过去的 6 个月里,我能够编译相当复杂的代码而没有什么问题。但是几周前,我偶然发现了未处理异常的问题。我研究并阅读了我能找到的任何东西,但如果可以使用 mingw/g++/llvm/clang 的任何组合的异常,我仍然没有明确的答案。 到目前为止,最接近的线索似乎是 ruben 的构建,但由于另一个已知问题 - strerror_s,我无法让它们工作。

我尝试编写的最小代码非常简单:

int main()
{
    try { throw 0; }
    catch(...) { return 1; }
    return 0;
}

任何帮助都将不胜感激,因为我已经停止工作并且正在努力解决异常情况。

谢谢, 欧林++

【问题讨论】:

  • 我单步执行了 clang 代码,似乎所有需要的函数调用都已发出(__cxa_allocate_exception、__cxa_throw、__cxa_begin_catch、__cxa_end_catch),但在生成的程序集中,我在 throw 后看不到任何内容(catch 是失踪)

标签: windows exception clang


【解决方案1】:

很抱歉,您在构建时遇到了问题。我必须承认 Windows XP 在我的优先级列表中并不高...

您可以尝试在Windows XP上使用GCC dw2工具链自己构建clang 3.2,从而不使用有问题的strerror_s函数。这只会影响 clang 二进制文件,而不影响它们生成的任何二进制文件。

【讨论】:

  • 所以这可能是迄今为止最好的消息......你是说有一些机会例外会起作用吗?其实我之前也试过编译3.2,但是遇到了strerror_s等类似的编译错误,所以放弃了。但现在我会再试一次。我将链接 msvcr100.dll。一个问题:我也需要编译 rt 吗?谢谢!如果这行得通,那就太好了。
  • Orlin:我的 clang 构建与来自同一个地方的 GCC 4.6 dw2 构建相结合,异常应该可以正常工作。唯一的问题是 Clang 二进制文件使用了在 Win XP 上不可用的 strerror_s(显然 Clang 假设它存在于 Windows 上)。
  • 嗨 Ruben,我成功地使用 i686-w64-mingw32-gcc-dw2-4.6.3-2-release-win32_rubenvb.7z 构建了 llvm/clang(但我必须链接 msvcr100.dll)。现在,当我尝试编译我的示例时,我收到与重命名 TempFile 相关的 IO 错误:“致命错误:后端错误:输出流上的 IO 失败。”我能够将其追踪到 MoveFileExW,它抱怨该文件正在被其他进程使用。你有什么想法?我将继续调试几天。谢谢你的帮助!奥林++
  • @Orlin 嗯,不抱歉。我会看看我是否能解决这个问题,也许可以构建一个也适用于 XP 的 Clang。
  • 那太好了,或者你可以给我任何指点,我决心继续努力,直到我成功为止。谢谢,Orlin++
猜你喜欢
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
相关资源
最近更新 更多