从现在开始几天以来,我一直在进行无Visual C ++ Runtime Library项目,但是直到进入链接器开始抱怨{{1的未解决的外部符号}} CRT函数,因此,在查找产生此错误的原因之后,我发现从主入口点调用任何自定义类的方法都在调用此CRT函数,简单示例:
__CxxFrameHandler3
错误:
// /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;
}
有没有办法阻止对此CRT函数的调用?
答案 0 :(得分:3)
将我的评论重新发布为答案:
此功能与SEH(结构化异常处理)有关,因此要停止调用它,需要在项目中禁用异常(SEH和C ++异常)。
答案 1 :(得分:1)
该功能是VS异常处理基础结构的一部分。为了安全地避免使用CRT,您将需要提供自己的(兼容!)异常处理函数实现,或者在禁用了异常的情况下进行编译,并谨慎地避免任何可能引发异常的事件。 (您显然没有做好准备的一个例外是等待发生内存泄漏。)