【发布时间】:2015-07-15 15:58:00
【问题描述】:
我正在尝试使用 emscripten 从源代码构建 Python 3.4。
我已经下载并成功安装了 emscripten。我在源代码树之外创建了一个构建文件夹。这些是我到目前为止执行的步骤:
运行配置:
$ emconfigure ../Python-3.4.3/configure --without-threads --without-pymalloc --enable-shared --disable-ipv6 --build=i686-linux-gnu我注意到在 ../Python-3.4.3/Include/pyport.h 中对 LONG_BIT 的检查与在 emscriptens 标头之一中定义的
#define SIZEOF_LONG冲突,所以我已注释掉 ../Python-3.4.3/Include/pyport.h 中的检查成功运行configure后,我在构建文件夹中运行
emmmake make我通过运行
file python检查构建的python 文件确实是LLVM 字节码。在对一切都感到满意后,我尝试将生成的 libpython3-4.so 与字节码链接如下:
$ llvm-link libpython3.4.so python -o python.bc
我收到以下错误消息:
错误:链接名为“_Py_open_cloexec_works”的全局变量:符号相乘 定义!
快速搜索源代码显示该符号未多次定义:
$ grep -rnw ../Python-3.4.3 -e "_Py_open_cloexec_works" --include=\*.{c,h}
../Python-3.4.3/Python/fileutils.c:33:int _Py_open_cloexec_works = -1;
../Python-3.4.3/Python/fileutils.c:784: atomic_flag_works = &_Py_open_cloexec_works;
../Python-3.4.3/Modules/posixmodule.c:7702:extern int _Py_open_cloexec_works;
../Python-3.4.3/Modules/posixmodule.c:7725: int *atomic_flag_works = &_Py_open_cloexec_works;
../Python-3.4.3/Modules/_io/fileio.c:210:extern int _Py_open_cloexec_works;
../Python-3.4.3/Modules/_io/fileio.c:232: int *atomic_flag_works = &_Py_open_cloexec_works;
所以我在 libpython3.4.so 上运行 nm 来检查导出的符号,我收到以下错误消息:
nm: libpython3.4.so: 文件格式无法识别
我现在已经没有想法了。谁能帮我解决链接问题?
[[附加信息]]
- clang 版本 3.6.0
- LLVM 版本 3.6.0svn
【问题讨论】:
标签: python build llvm emscripten