Скрипт, скомпилированный с Nuitka, поднимает ошибку сегментации
У меня есть скрипт 'test.py', который импортирует некоторые модули '.so' и зависит от них. модули.so находятся в папке "COMPILED", абсолютный путь которой я добавил в переменную окружения PYTHONPATH. Итак, теперь, когда я запускаю его - "$ python test.py" - он работает отлично. И когда я компилирую его с помощью Nuitka - "$ nuitka --recurse-all test.py" - он тоже компилируется и создает исполняемый файл "test.exe", теперь, когда я выполняю его вместо импорта и нормальной работы модуля, он вызывает "Ошибка сегментации"
И, наконец, я хотел бы добавить, что я сгенерировал файлы.so также с помощью Nuitka - они в основном модули. Они работают как сон с обычным некомпилированным питоном, но как только я скомпилирую test.py с Nuitka.... KABOOM!
Этот вопрос был задан до:
Но на него не было ответа, и я не мог комментировать или уведомлять кого-то там, потому что я только что создал свой аккаунт, поэтому я спросил его снова. Вот ссылка на ранее запрашиваемую версию: пакет python, соответствующий nuitka, завершается с ошибкой сегментации
Directory Structure:
/PARENT_FOLDER
|______/COMPILED: <---- this folder contains all the '.so' files
| file1.so
| file2.so
| .
| .
|______test.py <---- here is the test.py script
1 ответ
Хорошо! так что моя проблема была решена. Оказывается, что это была какая-то проблема с макетом памяти и прочим, я кое-что понял здесь: http://www.freelists.org/post/nuitka-dev/Building-modules-separately-from-the-main-application,3
Страница в основном говорит, что использование clang с nuitka вместо gcc удаляет segfault. Я собирался попробовать это, но я случайно набрал "nuitka --help" и наткнулся на эту опцию "--lto(оптимизация времени ссылки)". Я подумал о том, чтобы попробовать - заметьте, согласно --help, для этого требуется g++ - поэтому вместо запуска
nuitka --recurse-all test.py
Я побежал
nuitka --lto test.py
и полученный двоичный файл выполняется просто отлично, без "ошибок сегментации". Я тоже побежал
nuitka --recurse-all --lto test.py
это тоже работает - на случай, если вам интересно. Об этом также сообщалось как об ошибке в списке ошибок Nuitka:
Среда:
Нуитка версия: 0.5.18
версия gcc: 4.8.4
Ubuntu 14.04 64bit на Intel Corei5