1

我有一个脚本“test.py”,它导入一些“.so”模块并依赖于它们。'.so' 模块存在于文件夹 'COMPILED' 中,我已将其绝对路径添加到 PYTHONPATH 环境变量中。所以,现在当我运行它时——“$ python test.py”——它运行得很好。当我使用 Nuitka 编译它时 - “$ nuitka --recurse-all test.py” - 它也会编译并生成一个“test.exe”可执行文件,现在当我执行它而不是导入模块并正常运行时,它会引发一个'分段故障'

最后,我想补充一点,我也使用 Nuitka 生成了“.so”文件——它们基本上是模块。他们用普通的未编译的 python 像梦一样工作,但是一旦我用 Nuitka 编译 test.py.... KABOOM!

这个问题之前已经发布过:

但它没有得到答复,我无法评论或通知那里的人,因为我刚刚创建了我的帐户,所以我再次询问。这是之前询问的版本的链接: python package complied with nuitka failed 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
4

1 回答 1

1

好的!所以我的问题已经解决了。原来这是内存布局和东西的一些问题我从这里得到了一些提示: http ://www.freelists.org/post/nuitka-dev/Building-modules-separately-from-the-main-application,3

该页面基本上说使用带有nuitka而不是gcc的clang可以删除段错误。我打算尝试一下,但我随机输入了“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

环境:

Nuitka 版本:0.5.18

gcc 版本:4.8.4

英特尔 corei5 上的 Ubuntu 14.04 64 位

于 2016-02-03T21:49:34.570 回答