Точка входа в процедуру __gxx_personality_sj0 не может быть расположена в …

Мне удалось (как-то) кросс-компилировать Qt5 с компилятором проекта Mingw-w64 для 32-битной Windows. Все библиотеки были установлены в ~/i686-w64-mingw32,

У меня есть проект Qt на основе CMake, который я пытаюсь кросс-компилировать. Следуя эти инструкции, Я был в состоянии получить проект для компиляции. Все идет нормально.

К сожалению, при выполнении полученного двоичного файла в Windows я получаю сообщение об ошибке:

«Не удалось найти точку входа в процедуру __gxx_personality_sj0 в библиотеке динамических ссылок [application_name] .exe»

* [application_name] — полный путь к основному исполняемому файлу

Я слышал, что такого рода проблемы иногда могут быть вызваны смешиванием библиотек, скомпилированных с различными версиями MinGW. Но все на этом компьютере (все библиотеки и исполняемый файл) были скомпилированы одним и тем же компилятором ( i686-w64-mingw32 Набор инструментов).

Кроме того, я нахожу странным, что ошибка жалуется на отсутствие точки входа в исполняемом файле приложения вместо одного из .dll файлы.

Что может вызвать эту ошибку и что можно сделать, чтобы исправить ее?

17

Решение

Нахождение неверной библиотеки:

  • Откройте командную строку.
  • Введите «libstdc ++ — 6.dll» и нажмите «Enter»
  • Должно появиться окно сообщения с путем и сообщением: C: / SomeFolder / someapp /…/ libstdc ++ — 6.dll Этот файл не имеет программы, связанной с ним … и т. Д., И т. Д.
    Путь это ответ.
  • Запуск приложения из IDE:% PATH% в IDE может быть
    отличается от% PATH% в командной строке (см. настройки IDE). В
    в этом случае, поместив «libstdc ++ — 6.dll» в командный файл и запустив
    пакет из IDE должен показать, какой конкретный экземпляр
    библиотеки ваша программа забирает.

Мое личное решение:

  • Откройте «Свойства системы» -> «Переменные среды» (в моем случае в Windows 7) и убедитесь, что обе переменные% PATH% (одна для вашей учетной записи И общесистемная переменная% PATH%) начинаются с c: \ mingw \ bin (или любой другой путь к библиотеке). Кроме того, вам, возможно, придется перезапустить свою среду IDE, чтобы она подняла новую переменную PATH.

По моему опыту, способ выбора местоположения в% PATH% в MS Windows может быть очень ошибочным. В прошлый раз я добавил один исходный файл с одной функцией и включил эту функцию в свой код. Программа всегда будет выбирать неправильную библиотеку libstdc ++ — 6.dll, даже когда я удаляю весь код функции и оставляю только оператор return. Каждый раз, когда эта функция была закомментирована (исключена), программа снова будет работать нормально. Я подозреваю, что иногда Windows выбирает PATH из «Системных переменных» и по какой-то причине избегает «Пользовательские переменные» PATH (PATH вашей учетной записи Windows).

15

Другие решения

В итоге выяснилось, что проблема была вызвана своенравным libstdc++-6.dll где-то в $PATH, Убедившись, что копия, созданная Mingw-w64, находится в каталоге приложения, все заработало.

11

По вопросам рекламы [email protected]