我有一个脚本'test.py‘,它导入了一些'.so’模块,并依赖于它们。“.so”模块存在于一个文件夹“已编译”中,我将其绝对路径添加到PYTHONPATH环境变量中。所以,现在当我运行它-- "$ python test.py“--它运行得很好。当我使用Nuitka编译它时-- "$ nuitka --recurse-all test.py“--它也编译并生成一个'test.exe‘可执行文件,现在当我执行它而不是导入模块并正常运行时,它会引发一个’分段错误‘。
最后,我想补充的是,我也使用Nuitka生成了'.so‘文件--它们基本上是模块。他们的工作就像梦中一般的未编译的蟒蛇,但一旦我用Nuitka编译test.py .卡博姆!
这个问题已经发布过了:
但是它没有被回复,我不能评论或通知那里的人,因为我刚刚创建了我的帐户,所以我又问了一次。下面是指向先前询问的版本的链接:python package complied with nuitka fails with segmentation fault
Directory Structure:
/PARENT_FOLDER
|______/COMPILED: <---- this folder contains all the '.so' files
| file1.so
| file2.so
| .
| .
|______test.py <---- here is the test.py script发布于 2016-02-03 21:49:34
好的!所以我的问题解决了。原来这是内存布局的问题,我从这里得到了一些提示:http://www.freelists.org/post/nuitka-dev/Building-modules-separately-from-the-main-application,3
这一页基本上是说,使用clang和nuitka代替gcc删除了分段的错误。我本来打算试一试,但我随机输入了"nuitka -help“,并找到了这个选项”--lto(链接时间优化)“。我想试一试--根据--帮助--这需要g++所以不要运行
nuitka --recurse-all test.py 我跑了
nuitka --lto test.py生成的二进制文件在没有“分段错误”的情况下执行得很好。我也跑了
nuitka --recurse-all --lto test.py 这也很管用-万一你想知道。这也被报告为Nuitka bug列表中的一个bug:
message=msg%201799%20created%0Aissue%20238%20messages%20edited%20ok&@template=item
环境:
Nuitka版本: 0.5.18
gcc版本: 4.8.4
英特尔corei5上的Ubuntu14.04 64位
https://stackoverflow.com/questions/35163523
复制相似问题