Skip to main content
 首页 » 编程设计

python之Pygame 和 cx_freeze : segmentation fault

2025年05月04日14wayfarer

我正在使用 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 之前程序运行完美

请您参考如下方法:

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

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

pygame.font.Font(None, font_size) 

在这种情况下,valgrind报告地址 0x0 in ??? 中的无效读取在 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 中读取无效

很抱歉,我对此没有解决方案。

附言: 我刚刚发现另一个与 unicode 相关(但与 pygame 无关)的 cxfreeze 问题原因。

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 字符串。