在Ubuntu上使用emscripten编译Python 3.4(链接错误)

在Ubuntu上使用emscripten编译Python 3.4(链接错误),python,build,llvm,emscripten,Python,Build,Llvm,Emscripten,我正在尝试从源代码构建Python3.4,使用 我已下载并成功安装了emscripten。我已在源目录树外创建了一个生成文件夹。到目前为止,我已经采取了以下步骤: 运行配置: $emconfigure../Python-3.4.3/configure--不带线程--不带pymalloc--启用共享--禁用ipv6--构建=i686 linux gnu 我注意到../Python-3.4.3/Include/pyport.h中的LONG\u位检查与其中一个emscriptens头文件中定义的\de

我正在尝试从源代码构建Python3.4,使用

我已下载并成功安装了emscripten。我已在源目录树外创建了一个生成文件夹。到目前为止,我已经采取了以下步骤:

  • 运行配置:
    $emconfigure../Python-3.4.3/configure--不带线程--不带pymalloc--启用共享--禁用ipv6--构建=i686 linux gnu

  • 我注意到../Python-3.4.3/Include/pyport.h中的LONG\u位检查与其中一个emscriptens头文件中定义的
    \define SIZEOF\u LONG
    冲突,因此我已注释掉了签入../Python-3.4.3/Include/pyport.h

  • 成功运行configure后,我在构建文件夹中运行
    emmmake

  • 我通过运行
    filepython
    检查构建的python文件是否确实是LLVM字节码。在确信一切正常后,我尝试将生成的libpython3-4.so与字节码链接,如下所示:

  • $llvm链接libpython3.4.so python-o python.bc

    我收到以下错误消息:

    错误:链接名为“\u Py\u open\u cloexec\u 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

    您可以使用功能强大的
    objdump
    而不是
    nm
    。尝试
    objdump-t you_文件
    objdump-t you_文件


    示例:
    objdump-tlib.o

    我刚刚检查了生成的.so文件的文件类型。结果是它的LLVM位代码,所以nm和objdump都不能识别文件格式。