Pygame 和 cx_freeze:分段错误
Posted
技术标签:
【中文标题】Pygame 和 cx_freeze:分段错误【英文标题】:Pygame and cx_freeze: segmentation fault 【发布时间】:2011-04-17 13:27:33 【问题描述】:我使用的是 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 之前程序运行良好
【问题讨论】:
我也遇到了这个问题,我访问了三个图像,然后是段错误,太奇怪了。 【参考方案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 字符串。
【讨论】:
成功了!好吧,经过这么长时间,我对这个项目失去了兴趣,但仍然!谢谢;-)【参考方案2】:冻结脚本时是否设置了任何优化选项?我不太确定它是否这样做,但可能是它错误地将变量更改为引用。同样,我不是 cx_freeze 的专家,但我的解决方案是更新。你有最新版本(cx_freeze)吗?
【讨论】:
是的,我已经下载了最新版本的 cx freeze,我没有设置任何优化选项..我只是运行'python setup.py build'【参考方案3】:您是否在 Google 上搜索过您的错误(http://www.google.com/search?&q=Fatal%20Python%20error%3A%20%28pygame%20parachute%29%20Segmentation%20Fault)并查看各种帖子报告同样的错误?
例如
http://www.pyweek.org/d/2976/ http://osdir.com/ml/python.pygame/2001-12/msg00055.html ...【讨论】:
是的,我做到了..我已经阅读了它们,但没有找到任何解决方案..我的问题来自我使用 cx freeze 编译程序时,而不是之前..【参考方案4】:我遇到了类似的错误,我想我已经找到了解决方案。 我正在使用
pygame.font.SysFont(None,25)
但是,您应该使用系统的字体,而不是传递 None 参数。 我使用的是 Windows 机器,所以我没有用我的系统拥有的任何字体替换。所以我将其替换为:
pygame.font.SysFont("comicsansms",25)
如您所见,我已将 None 替换为 comicsansms,这是 Windows PC 上预装的字体 希望它有效!
【讨论】:
【参考方案5】:使用
pygame.font.SysFont(FONT_NAME, FONT_SIZE)
.
【讨论】:
欢迎来到 ***!不鼓励仅使用代码的答案。您能否编辑您的答案以解释它如何修复段错误?以上是关于Pygame 和 cx_freeze:分段错误的主要内容,如果未能解决你的问题,请参考以下文章
cx_Freeze 将 Python 和 Pygame 文档编译为 .exe 文件时出现奇怪的错误
可执行文件 = 可执行文件 python 错误(尝试使用 cx_freeze 将 pygame 转换为可执行文件)
CX_Freeze 没有响应 Pygame 和 Pykinect
使用 pygame.midi 播放 midi 音符时出现分段错误