海湾合作委员会计划没有例外

时间:2010-03-11 12:28:02

标签: c++ gcc exception-handling

我的项目包含共享库和exe客户端。我发现从库中抛出的我自己的异常类没有被客户端catch块捕获,并且程序以“在抛出...的实例后调用终止”消息终止。继续玩这个项目,我发现任何类型的任何例外都没有被捕获。例如,此捕获不起作用:

    try
    {
        m_pSerialPort = new boost::asio::serial_port(m_IoService, "non-existing-port");
    }
    catch(const boost::system::system_error& e)
    {
        // ...
    }

错误讯息:

terminate called after throwing an instance of 
'boost::exception_detail::clone_impl
<boost::exception_detail::error_info_injector
<boost::system::system_error> >'
  what():  No such file or directory

GCC版本是4.4.1,Linux OS。相同的代码在Windows,MSVC中成功运行。 什么原因可以阻止GCC程序正确捕获异常?

1 个答案:

答案 0 :(得分:9)

客户端.exe和共享库都应该与libgcc链接,以便跨越共享库边界。根据GCC手册:

  

...如果库或主可执行文件应该抛出或捕获异常,则必须使用G ++或GCJ驱动程序链接它,以适用于程序中使用的语言,或使用选项-shared-libgcc,这样它就与共享的libgcc链接。