Собираю библиотеку Lib.so (Ubuntu, gcc 5.4.0), с помощью CMake на Ubuntu. Параметры сборки такие:
cmake_minimum_required(VERSION 3.2)
set(ProjectName "TestMain")
project(${ProjectName})
SET(CMAKE_CXX_COMPILER "/usr/bin/gcc")
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-m64 -std=c++11")
SET(CMAKE_BUILD_TYPE RelWithDebInfo)
set(SOURCE_FILES
Main.h
Main.cpp
)
set_source_files_properties(${SOURCE_FILES}
PROPERTIES COMPILE_FLAGS
"-finput-charset=UTF-8 -fPIC")
add_library(${ProjectName} SHARED ${SOURCE_FILES})
set_target_properties( ${ProjectName} PROPERTIES CLEAN_DIRECT_OUTPUT 1 OUTPUT_NAME ${ProjectName} )
target_link_libraries (${ProjectName} "${REQUIRED_LIBRARIES}")
Сборка проходит без ошибок. В одном из методов есть конструкция:
try{
...
throw "Error";
...
}
catch (...)
{
...<обработка исключения>
}
Если вызвать этот метод, когда срабатывает исключение, вместо того, чтобы попасть в catch, вызывается terminate(), и никакой обработки исключений не возникает, работа вызванного метода завершается, не в зависимости от того, где возник throw.
Вызывается библиотека из 1С (сервер на CentOS), с помощью "ПодключитьВнешнююКомпоненту", все вызовы работают корректно, за исключением этой обработки исключений, собранная под Win dll обрабатывает исключения корректно.
Если сделать код из библиотеки, в консольном приложении, обработка исключений проходит корректно. Я так полагаю, что это связано именно с shared library, и, видимо, с некорректными флагами сборки.
Гуглил, наткнулся решение добавить флагов -static-libstdc++ или -static-libgcc, но их добавление ничего не меняет, либо я не правильно их добавлял, любое исключение в библиотеке срабатывает как terminate().
Подскажите, в какую сторону посмотреть и/или что можно попробовать сделать, чтобы исключения в .so работали корректно.
У нас была похожая проблема, когда собирался код с одной библиотекой libstdc++ (ну или как там называется стандартная библиотека с++), а выполнялся код с другой библиотекой (в смысле с другой версией). Исключения не ловились.
Проверьте версии libgcc - с какой собирается, с какой запускается.
Задали написать арканоидВозникла проблема с моментом физики поведения мяча, мяч и дощечка ( от которой он отскакивает ) представляют собой...
Не получается сделать так, чтобы при касании на экран появляется объект canvas цифра 8 в точке нажатияПомогите исправить ошибку