gpt4 book ai didi

c++ - try-catch block 可以在 LLVM/MSVC 上编译吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:24 28 4
gpt4 key购买 nike

我正在尝试将使用大量异常(try/catch block )的项目的编译器集合从 Microsoft Visual C++ 更改为 LLVM,但遇到了编译问题。

使用的工具链:

  • Visual Studio 2015 企业版 (MSVC 14)
  • LLVM 3.7 Windows/x64

这是一些测试源代码:

#include <iostream>
int main()
{
try
{
throw 20;
}
catch (int e)
{
std::cout << "An exception occurred. Exception Nr. " << e << '\n';
}
return 0;
}

使用内置的 Visual Studio 编译器集合 (v140) 编译代码,这是命令行结果:

ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe
/c /ZI /nologo /W3 /WX- /sdl /Od /Oy- /D _MBCS /Gm /EHsc /RTC1 /MDd /GS /fp:precise
/Zc:wchar_t /Zc:forScope /Zc:inline /Fo "Debug\\" /Fd"Debug\vc140.pdb" /Gd /TP
/analyze- /errorReport:queue Main.cpp
Main.cpp
Link:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\link.exe
/ERRORREPORT:QUEUE /OUT:"C:\Users\jurocha\Desktop\ClangExcept\Debug\ClangExcept.exe"
/INCREMENTAL /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
/MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /Debug
/PDB:"C:\Users\jurocha\Desktop\ClangExcept\Debug\ClangExcept.pdb" /TLBID:1
/DYNAMICBASE /NXCOMPAT
/IMPLIB:"C:\Users\jurocha\Desktop\ClangExcept\Debug\ClangExcept.lib"
/MACHINE:X86 Debug\Main.obj

编译成功

现在,将编译器更改为 LLVM (LLVM-vs2014):

ClCompile:
C:\Program Files\LLVM\3.7\msbuild-bin\CL.exe
/c /ZI /nologo /W3 /WX- /sdl /Od /Oy- /D _MBCS /Gm /EHsc /RTC1 /MDd /GS /fp:precise
/Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TP
/analyze- /errorReport:queue -m32 -fmsc-version=1900 Main.cpp
clang-cl.exe : warning : argument unused during compilation: '/ZI' [ClangExcept.vcxproj]
clang-cl.exe : warning : argument unused during compilation: '/Gm' [ClangExcept.vcxproj]
clang-cl.exe : warning : argument unused during compilation: '/GS' [ClangExcept.vcxproj]
Main.cpp(7,3): error : cannot use 'throw' with exceptions disabled [ClangExcept.vcxproj]
throw 20;
^
Main.cpp(5,2): error : cannot use 'try' with exceptions disabled [ClangExcept.vcxproj]
try
^
2 errors generated.

根据这份文件,http://clang.llvm.org/docs/MSVCCompatibility.html :“异常和 SEH:部分”。但我无法充分理解它。

有没有人能做到这一点?

最佳答案

您链接到的 LLVM 页面说

Exceptions and SEH: Partial. C++ exceptions (try / catch / throw) and structured exceptions (__try / __except / __finally) mostly work on x64. 32-bit exception handling support is being worked on.

但是在您的 VC++ 链接参数中您有 /MACHINE:X86,并且您还将 -m32 传递给 LLVM,这表明您尝试构建一个 32-位应用程序 - 不起作用的模型。

更改您的设置以构建 64 位可执行文件。

关于c++ - try-catch block 可以在 LLVM/MSVC 上编译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32884812/

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