阻止我的项目调用 __CxxFrameHandler3(CRT 函数)
Prevent my project from calling the __CxxFrameHandler3 (CRT function)
从现在开始几天,我一直致力于 none Visual C++ 运行时库项目,但是,在我的链接器开始抱怨之前,我进展顺利__CxxFrameHandler3
CRT函数未解析的外部符号,所以在搜索产生这个错误的原因后我发现从主入口点调用任何自定义class的方法就是调用这个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[=12=]
有没有办法阻止调用此 CRT 函数?
该函数是 VS 异常处理基础结构的一部分。为了安全地避免使用 CRT,您需要提供您自己的(兼容的!)异常处理函数的实现,或者在禁用异常的情况下编译并虔诚地避免任何可能引发异常的事情。 (您明确没有做好准备的异常是等待发生的内存泄漏。)
重新发布我的评论作为答案:
此函数与SEH(Structured Exceptions Handling)有关,所以要停止调用它,需要在项目中禁用异常(SEH和C++异常)。
从现在开始几天,我一直致力于 none Visual C++ 运行时库项目,但是,在我的链接器开始抱怨之前,我进展顺利__CxxFrameHandler3
CRT函数未解析的外部符号,所以在搜索产生这个错误的原因后我发现从主入口点调用任何自定义class的方法就是调用这个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[=12=]
有没有办法阻止调用此 CRT 函数?
该函数是 VS 异常处理基础结构的一部分。为了安全地避免使用 CRT,您需要提供您自己的(兼容的!)异常处理函数的实现,或者在禁用异常的情况下编译并虔诚地避免任何可能引发异常的事情。 (您明确没有做好准备的异常是等待发生的内存泄漏。)
重新发布我的评论作为答案:
此函数与SEH(Structured Exceptions Handling)有关,所以要停止调用它,需要在项目中禁用异常(SEH和C++异常)。