내 문제는 다음C++ 예외
자주 반복되는 작업의 래퍼 같은 ICE (인터넷 통신 엔진) 뭔가를 기반으로 Interface.so라는 공유 라이브러리가있다. 이러한 작업 중 하나는 주제 (id와 유사)에 등록하는 것입니다. 이 주제가 이미 존재하지 않는 경우, ICE는 NoSuchTopic이라는 예외를 throw합니다.
독립 실행 형 Qt 응용 프로그램에서 Interface.so를 사용하는 경우 NoSuchTopic 예외를 catch하고 catch 블록에 주제를 만들 수 있습니다 (catch 블록은 Interface.so에 있습니다). 하지만 나는 그 자체를 공유 객체 인 비행 시뮬레이터 용 플러그인에서 동일하게하고 싶습니다. 그리고 예외는 앞에서 언급 한 Interface.so의 catch 블록에 의해 발견되지 않습니다. 대신, 비행 시뮬레이터는
terminate called after throwing an instance of 'IceStorm::NoSuchTopic'
나노 -C -D는 'IceStorm :: NoSuchTopic가'Interface.so에 정의되어 있지 않습니다 있다고 주장 충돌합니다. 이거 괜찮아? 또는 정의를 찾을 수있는 참조가 있어야합니까? 이미 libIceStorm.so (libs + = -lIceStorm)에 IceStorm :: NoSuchTopic (nm에 따라)이 정의되어 있지만 아무것도 변경하지 않은 항목이 추가되었습니다!
또한 '-Wl, -E'도 시도했지만 Qt Creator에서이 옵션을 올바르게 설정했는지 여부는 알 수 없습니다. 이게 도움이 되겠습니까?
나는 모든 힌트에 감사 할 것입니다.
답변 해 주셔서 감사합니다. 불행히도 나는 여기에 게시하기 전에 모든 제안을 시도했다. (내 "-Wl, -E"는 링크 된 응답에서 나온 것이다.) 그러나 마침내 동료가 문제를 해결했습니다. Ubuntu 저장소에서 ICE에 사용 된 GCC 버전은 Ubuntu 11.10 Default GCC와 다르므로 ICE 소스에서 다시 컴파일하여 문제를 해결했습니다. – Markus