You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cx_Freeze构建setup.py时出现linux-vdso.so.1不存在错误

解决cx_Freeze打包时找不到linux-vdso.so.1的问题

问题场景

为依赖numba、pyglet和numpy的main.py编写了如下setup.py脚本:

# 注:原代码遗漏了from关键字,已修正
from cx_Freeze import setup, Executable

build_exe_options = {
"packages": ["pyglet", "llvmlite", "numpy", "numba"], 
"excludes": ["tkinter", "pygame"]}

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(
    name="guifoo",
    version="0.1",
    description="My GUI application!",
    options={"build_exe": build_exe_options},
    executables=[Executable("main.py", base=base)],
)

执行python setup.py build时持续报错:

creating directory /home/onuelito/Documents/Python Projects/paint/build/exe.linux-x86_64-3.10/lib
copying /home/onuelito/.local/lib/python3.10/site-packages/cx_Freeze/bases/lib/libcrypt-796a3fb8.so.2 -> /home/onuelito/Documents/Python Projects/paint/build/exe.linux-x86_64-3.10/lib/libcrypt-796a3fb8.so.2
copying linux-vdso.so.1 -> /home/onuelito/Documents/Python Projects/paint/build/exe.linux-x86_64-3.10/lib/linux-vdso.so.1
error: [Errno 2] No such file or directory: 'linux-vdso.so.1'

操作系统为Manjaro XFCE。

问题原因

linux-vdso.so.1是Linux内核提供的虚拟动态共享对象,并非磁盘上存在的真实文件,cx_Freeze错误地将其判定为需要复制的依赖库,因此触发找不到文件的错误。

解决方法

1. 在打包配置中排除虚拟库

修改build_exe_options,新增bin_excludes项跳过该虚拟库:

build_exe_options = {
    "packages": ["pyglet", "llvmlite", "numpy", "numba"], 
    "excludes": ["tkinter", "pygame"],
    "bin_excludes": ["linux-vdso.so.1"]  # 添加此行排除虚拟库
}

2. 升级cx_Freeze到最新版本

该问题属于cx_Freeze的已知bug,后续版本已修复。执行以下命令升级:

pip install --upgrade cx_Freeze

3. 临时创建符号链接(不推荐)

若暂时无法升级cx_Freeze,可临时创建一个指向真实系统库的符号链接作为临时 workaround:

sudo ln -s /usr/lib/libc.so.6 /usr/lib/linux-vdso.so.1

打包完成后记得删除该链接:

sudo rm /usr/lib/linux-vdso.so.1

内容的提问来源于stack exchange,提问作者Onuelito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:54:26