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

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

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

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

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

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

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

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

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


person Nathan Osman    schedule 15.02.2013    source источник
comment
возможно, вы используете программное обеспечение, скомпилированное с другой версией   -  person didierc    schedule 15.02.2013
comment
@didierc: У меня установлена ​​только одна версия Mingw-w64.   -  person Nathan Osman    schedule 15.02.2013
comment
Мне было интересно, было ли у вас программное обеспечение, скомпилированное с другой версией mingw, а не если вы использовали другую версию mingw. Ваш ответ в точности отражает мое предположение, что где-то другое программное обеспечение использовало библиотеку, созданную с другой версией, и что это каким-то образом мешало вашей скомпилированной программе. Я полагаю, что я недостаточно хорошо выразился, но вы все поняли, слава вам!   -  person didierc    schedule 15.02.2013
comment
При создании пути добавьте свой перед текущим путем, например PATH=/my/path;%PATH%   -  person dashesy    schedule 20.10.2016


Ответы (2)


Определение местоположения не той библиотеки:

  • Откройте командную строку.
  • Введите «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).

person cloudcell    schedule 12.01.2014

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

person Nathan Osman    schedule 15.02.2013
comment
Спасибо! У меня была ошибка Точка входа процедуры __gxx_personality_sj0 не могла быть расположена в библиотеке динамической компоновки libstdc ++ - 6.dll, и переименование c: \ Windows \ SysWOW64 \ libstdc ++ - 6.dll сработало! - person Sanya_Zol; 23.04.2013
comment
Перед сборкой исходников удобно запустить where libstdc++-6.dll. В моем случае у меня была установка Anaconda в моей переменной PATH до записи там mingw. - person Mykola Niemtsov; 08.08.2015
comment
Я удалил dll из каталога Windows, и это сработало. Тем не менее, вероятно, это не те инструкции, которые я хочу давать людям по телефону, чтобы моя программа работала на их компьютере. Ох уж DLL, черт возьми ... - person Dmitry; 06.04.2016