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

时间:2015-05-05 18:57:28

标签: python build llvm emscripten

我正在尝试使用emscripten从源代码构建Python 3.4。

我已下载并成功安装了emscripten。我在源树外创建了一个构建文件夹。这些是我到目前为止所采取的步骤:

  1. 运行configure: $ emconfigure ../Python-3.4.3/configure --without-threads --without-pymalloc --enable-shared --disable-ipv6 --build=i686-linux-gnu

  2. 我注意到../Python-3.4.3/Include/pyport.h中的 LONG_BIT 检查与其中一个emscriptens标头中定义的#define SIZEOF_LONG冲突,所以我已经注释了支票../ Python-3.4.3 / Include / pyport.h

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

  4. 我通过运行file python检查构建的python文件是否确实是LLVM字节码。在满足自己一切顺利的情况下,我尝试将生成的libpython3-4.so与字节码链接如下:

  5. $ llvm-link libpython3.4.so python -o python.bc

    我收到以下错误消息:

      

    错误:链接名为' _Py_open_cloexec_works':符号倍增的全局变量   定义!

    快速搜索源代码,显示符号 NOT 乘法定义:

    $ 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 version 3.6.0
    • LLVM版本3.6.0svn

1 个答案:

答案 0 :(得分:0)

您可以使用强大的nm代替objdump。试试objdump -t you_fileobjdump -T you_file

示例:objdump -t lib.o