내 프로젝트에 공유 라이브러리와 exe 클라이언트가 있습니다. 라이브러리에서 던져진 내 자신의 예외 클래스가 클라이언트 catch 블록에 의해 catch되지 않고 프로그램이 "...의 인스턴스를 throw 한 후 호출 종료"메시지로 종료됨을 발견했습니다. 프로젝트를 계속 진행하면서 어떤 유형의 예외도 발견되지 않는 것으로 나타났습니다. 예를 들어,이 캐치가 작동하지 않습니다GCC 프로그램에서 예외가 발견되지 않습니다.
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, 리눅스 OS입니다. 동일한 코드가 Windows에서 성공적으로 실행되고 있습니다 (MSVC). GCC 프로그램이 예외를 제대로 잡을 수없는 이유는 무엇입니까?
gcc로 전달되는 인수를 볼 수 있도록 Makefile을 게시 할 수 있습니까? 예외를 비활성화하는 인수를 전달할 수 있습니다. –
추가 정보 :이 코드를 추가하면 : {throw 1;} catch (int) {}를 클라이언트 실행 파일에 적용하면 모든 것이 정상입니다. 그러나 공유 라이브러리의 동일한 코드는 다음을 제공합니다. 'int'인스턴스를 throw 한 후 호출 종료. –
현저한 컴파일러 : 기술적 인 문제. Makefile을 여기에 게시하려면 어떻게해야합니까? 설명은 길이에 의해 제한되며 형식을 사용할 수 없습니다. –