阻止我的项目调用__CxxFrameHandler3(CRT函数)

Prevent my project from calling the __CxxFrameHandler3 (CRT function)

本文关键字:CRT 函数 CxxFrameHandler3 我的 项目 调用      更新时间:2023-10-16

从现在起的几天里,我一直在处理一个none Visual C++Runtime Library项目,然而,我一直进展顺利,直到我的链接器开始抱怨__CxxFrameHandler3CRT函数的未解析外部符号,因此,在搜索了产生这个错误的原因后,我发现从主入口点调用任何自定义类的方法都是在调用这个CRT函数,简单的例子:

// /No Common Language RunTime Support
// /Ignore All Default Libraries 
class A
{
public:
A();
~A();
int do_something();
private:
};
int A::do_something()
{
return 0;
}
int EntryPoint()
{
A a;
a.do_something(); // Calls the __CxxFrameHandler3 CRT function.
return 0;
}

错误:

LNK2019    unresolved external symbol ___CxxFrameHandler3 referenced in function __unwindfunclet$?UmbraServerMain@@YGHPAUHINSTANCE__@@0PA_WH@Z$0   

有没有办法阻止调用这个CRT函数?

将我的评论重新作为答案:

此函数与SEH(结构化异常处理(有关,因此要停止调用它,需要在项目中禁用异常(SEH和C++异常(。

该函数是VS异常处理基础设施的一部分。为了安全地避免使用CRT,您需要提供自己的(兼容的!(异常处理函数实现,或者在禁用异常的情况下编译,并严格避免任何可能引发异常的事情。(一个你明确没有做好准备的例外是等待发生的内存泄漏。(