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