我正在尝试使用 Nuitka 将 Python 代码编译为 C,然后使用 emcc 将生成的 C 代码编译为 WASM。我已使用以下命令从简单的 HelloWorld.py 文件成功生成了 C 代码:
python -m nuitka --standalone --output-dir=output HelloWorld.py
这会在我的输出目录中生成一个 build 和一个 dist 文件夹。构建文件夹包含多个文件,包括:
__constants.bin
__constants.c
__constants.const
__constants.h
__constants.o
__helpers.c
__helpers.h
__helpers.o
__loader.c
__loader.o
module.__main__.c
module.__main__.const
和一个 static_src 文件夹包含:
CompiledFunctionType.c
CompiledFunctionType.o
MainProgram.c
MainProgram.o
我是 C 新手,我不知道如何使用 emcc 将所有这些分散的文件编译成 WASM。我尝试使用以下命令编译其中一个文件:
emcc module.__main__.c -o module.__main__.wasm
但是由于缺少 Nuitka 的头文件(例如 nuitka/prelude.h 和 patchlevel.h),这导致了几个错误。我为 emcc 添加了一些路径来查找这些实现,但最终遇到了以下错误:
/Users/gui/.pyenv/versions/3.10.0/include/python3.10/pyport.h:746:2: error: "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
746 | #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
这表明 Python 或其库之间存在潜在的差异,这些库是为与我当前使用的架构不同的架构编译的,例如32 位或 64 位。我已经验证我的 python 版本和编译器版本均适用于 64 位,所以我无法弄清楚为什么会出现此错误。想了解这个问题是否有任何可能的解决方案?
有人尝试使用 emcc 将 Nuitka 生成的 C 代码编译为 WASM 吗?有可能实现这一目标吗?任何有关如何将 C 代码编译为 WASM 的建议将不胜感激。
提前谢谢您。
附加信息:
Python version: 3.10.0
Nuitka version: 1.7.1
Nuitka compilation output:
Nuitka-Options:INFO: Used command line options: --standalone --output-dir=output HelloWorld.py
Nuitka:INFO: Starting Python compilation with Nuitka '1.7.1' on Python '3.10' commercial grade 'not installed'.
Nuitka:INFO: Completed Python level compilation and optimization.
Nuitka:INFO: Generating source code for C backend compiler.
Nuitka:INFO: Running data composer tool for optimal constant value handling.
Nuitka:INFO: Running C compilation via Scons.
Nuitka-Scons:INFO: Backend C compiler: /usr/bin/clang (clang).
Nuitka-Scons:INFO: Backend linking program with 6 files (no progress information available for this stage).
Nuitka-Scons:INFO: Compiled 6 C files using ccache.
Nuitka-Scons:INFO: Cached C files (using ccache) with result 'cache hit': 6
Nuitka:INFO: Keeping build directory 'output/HelloWorld.build'.
Nuitka:INFO: Created binary that runs on macOS 12.4 (arm64) or higher.
Nuitka:INFO: Successfully created 'output/HelloWorld.dist/HelloWorld.bin'.
回答旧帖子,但既然我设法到达这里,我将添加我的发现。根据这个问题
生成的 C 文件仅用于测试目的。