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

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

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

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

"Точка входа процедуры __gxx_personality_sj0 не может быть расположена в библиотеке динамических ссылок [имя_приложения].exe"

* [имя_программы] - полный путь к основному исполняемому файлу

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

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

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

Ответы

Ответ 1

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

Ответ 2

Поиск местоположения неправильной библиотеки:

  • Откройте командную строку.
  • Введите "libstdС++ - 6.dll" и нажмите "Enter"
  • Должно появиться окно сообщения с указанием пути и сообщения: c:/somefolder/someapp/.../libstdС++ - 6.dll У этого файла нет связанной с ним программы.., и т.д. Путь - это ответ.
  • Запуск приложения из среды IDE:% PATH% в среде IDE может быть отличается от% PATH% в командной строке (см. настройки IDE). В в этом случае, добавив "libstdС++ - 6.dll" в пакетный файл и выполнив пакет из среды IDE должен показать, какой конкретный экземпляр библиотеки, которую подбирает ваша программа.

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

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

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