2013-04-27 3 views
0

Я хотел бы использовать clang для разработки C++ (сейчас на данный момент, но Linux, android и т. Д.), И до сих пор за последние 6 месяцев я смог скомпилировать довольно сложный код с небольшими проблемами. Но пару недель назад я наткнулся на проблему с исключениями, которые не обрабатываются. Я исследовал и читал все, что мог найти, но у меня до сих пор нет окончательного ответа, если можно использовать исключения с любой комбинацией mingw/g ++/llvm/clang. Ближайшие выводы до сих пор кажутся строками ruben, но я не могу заставить их работать из-за другой известной проблемы - strerror_s.clang поддержка исключений в окнах xp

Минимальный код, который я пытаюсь сделать работу довольно просто:

int main() 
{ 
    try { throw 0; } 
    catch(...) { return 1; } 
    return 0; 
} 

Любая помощь будет принята с благодарностью, потому что я прекратил свою работу, и я изо всех сил, чтобы получить исключения собирается.

Спасибо, Орлин ++

+0

Я прошел через код лязга и, кажется, все необходимые вызовы функций излучаются (__cxa_allocate_exception, __cxa_throw, __cxa_begin_catch, __cxa_end_catch), но в сгенерированной сборке, я не вижу ничего после броска (улов отсутствует) – Orlin

ответ

0

Я извиняюсь у вас возникли проблемы с моей сборки. Должен признаться, что Windows XP не слишком высока в моем списке приоритетов ...

Что вы можете попробовать - это создать clang 3.2 самостоятельно с помощью инструментальной цепочки GCC dw2 в Windows XP, так что проблемная функция strerror_s не используется. Это то, что влияет только на двоичные файлы clang, а не на любые исполняемые файлы, которые они производят.

+0

Так что это могут быть лучшими новостями до сих пор ... Вы говорите, что есть некоторые случайные исключения, которые будут работать? Я на самом деле пытался скомпилировать 3.2 раньше, но получил strerror_s и другие подобные ошибки компиляции, поэтому я сдался. Но теперь я попробую еще раз. Я свяжусь с msvcr100.dll. Вопрос: Нужно ли мне также компилировать rt? Благодаря! Если это сработает, это будет здорово. – Orlin

+0

Orlin: с моей сборкой clang в сочетании с GCC 4.6 dw2 build из того же места, исключения должны работать нормально. Единственная проблема заключается в том, что в бинарнике Clang используется strerror_s, который недоступен в Win XP (и, по-видимому, Clang предполагает, что он присутствует в Windows). – rubenvb

+0

Привет, Рубен, я успешно создал llvm/clang с i686-w64-mingw32-gcc-dw2-4.6.3-2-release-win32_rubenvb.7z (но мне нужно было связать msvcr100.dll). Теперь, когда я пытаюсь скомпилировать свой пример, я получаю ошибки ввода-вывода, связанные с переименованием TempFile: «фатальная ошибка: ошибка в backend: ошибка ввода-вывода в потоке вывода». Я смог проследить его до MoveFileExW, который жалуется, что файл используется другим процессом. У тебя есть идеи? Я продолжу отладку еще пару дней. Спасибо за вашу помощь! Орлин ++ – Orlin

Смежные вопросы