Мне удалось (как-то) кросс-компилировать Qt5 с компилятором проекта Mingw-w64 для 32-битной Windows. Все библиотеки были установлены в ~/i686-w64-mingw32
,
У меня есть проект Qt на основе CMake, который я пытаюсь кросс-компилировать. Следуя эти инструкции, Я был в состоянии получить проект для компиляции. Все идет нормально.
К сожалению, при выполнении полученного двоичного файла в Windows я получаю сообщение об ошибке:
«Не удалось найти точку входа в процедуру __gxx_personality_sj0 в библиотеке динамических ссылок [application_name] .exe»
* [application_name] — полный путь к основному исполняемому файлу
Я слышал, что такого рода проблемы иногда могут быть вызваны смешиванием библиотек, скомпилированных с различными версиями MinGW. Но все на этом компьютере (все библиотеки и исполняемый файл) были скомпилированы одним и тем же компилятором ( i686-w64-mingw32
Набор инструментов).
Кроме того, я нахожу странным, что ошибка жалуется на отсутствие точки входа в исполняемом файле приложения вместо одного из .dll
файлы.
Что может вызвать эту ошибку и что можно сделать, чтобы исправить ее?
Нахождение неверной библиотеки:
Мое личное решение:
По моему опыту, способ выбора местоположения в% PATH% в MS Windows может быть очень ошибочным. В прошлый раз я добавил один исходный файл с одной функцией и включил эту функцию в свой код. Программа всегда будет выбирать неправильную библиотеку libstdc ++ — 6.dll, даже когда я удаляю весь код функции и оставляю только оператор return. Каждый раз, когда эта функция была закомментирована (исключена), программа снова будет работать нормально. Я подозреваю, что иногда Windows выбирает PATH из «Системных переменных» и по какой-то причине избегает «Пользовательские переменные» PATH (PATH вашей учетной записи Windows).
В итоге выяснилось, что проблема была вызвана своенравным libstdc++-6.dll
где-то в $PATH
, Убедившись, что копия, созданная Mingw-w64, находится в каталоге приложения, все заработало.