Pygame和cx_freeze:分段错误

时间:2011-04-17 13:27:34

标签: python segmentation-fault pygame cx-freeze

我正在使用ubuntu和python 2.6

我发现我的系统上已经安装了cx freeze(是否有办法检查它是否与我的Python版本兼容?)

然而,我有一个小的pygame脚本(导入另一个模块和一些图像),我想编译它;

我将此文件用作setup.py:

#!/usr/bin/python

from cx_Freeze import setup, Executable

setup(
    name = 'Example',
    version = '0.1',
    description='hi',
    executables = [Executable('/home/antonio/Python 26 save/opt/example.py')]
    )

如果我运行生成的可执行文件,(通过终端)我收到此错误:

Fatal Python error: (pygame parachute) Segmentation Fault
Aborted

我该怎么办?我搜索了但是我发现很少的例子,我没有在谷歌搜索结果中看到这个错误

当然,程序在使用cx freeze之前运行得很好

5 个答案:

答案 0 :(得分:1)

我使用python 2.7遇到了类似的问题。我在自己的程序中发现了这个分段错误的两个原因,但我只有一个解决方案。

原因1.初始化没有路径的字体,即调用:

pygame.font.Font(None, font_size)

在这种情况下,valgrind报告在地址0x0处的无效读取?在pygame.font.so

我猜这是因为None被转换为NULL指针,然后假定某个有效的const char *字符串。

此问题的解决方法是始终提供字体的有效路径。

原因2.在字体中渲染unicode字符

pygame.font.Font("data/DejaVuSans.ttf", 14).render(u'\u2654')

valgrind在libpython2.7.so.1.0中报告PyString_AsString中的无效读取

我很遗憾地说我没有解决方案。

PS: 我刚刚发现另一个与cxfreeze相关的unicode相关(但与pygame无关)。

print u'\u2654'

在python解释器中会打印一个王(棋子),但是当用cxfreeze编译脚本时,我得到以下错误(不是分段错误):

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2654' in position 0: ordinal not in range(128)

如果你打电话:

,你也会在python解释器中遇到这个错误
print str(u'\u2654')

这似乎表明cxfreeze假设字符串总是ascii字符串。

答案 1 :(得分:0)

冻结脚本时是否设置了任何优化选项?我不太确定它是否这样做,但可能是它错误地将变量更改为引用。同样,我不是cx_freeze的专家,但我的解决方案是更新。你有(cx_freeze)的最新版本吗?

答案 2 :(得分:0)

你有没有谷歌的错误(http://www.google.com/search?&q=Fatal%20Python%20error%3A%20%28pygame%20parachute%29%20Segmentation%20Fault)并查看各种错误报道相同错误的帖子?

E.g。

答案 3 :(得分:0)

我遇到了类似的错误,我想我找到了解决方案。 我正在使用

pygame.font.SysFont(None,25)

但是不要传递None参数,而应该使用系统的字体。 我使用的是Windows机器,所以我用我的系统所拥有的任何字体替换了它。所以我把它换成了:

pygame.font.SysFont("comicsansms",25)

如您所见,我已将替换为 comicsansms ,这是Windows PC上预装的字体 希望它有效!

答案 4 :(得分:0)

使用 pygame.font.SysFont(FONT_NAME, FONT_SIZE)