Скрипт, скомпилированный с 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:

http://bugs.nuitka.net/issue238?@ok_message=msg%201799%20created%0Aissue%20238%20messages%20edited%20ok&@template=item

Среда:

Нуитка версия: 0.5.18

версия gcc: 4.8.4

Ubuntu 14.04 64bit на Intel Corei5

Другие вопросы по тегам