【问题标题】:Error trying to build emsdk on Ubuntu 16.04尝试在 Ubuntu 16.04 上构建 emsdk 时出错
【发布时间】:2017-08-10 02:36:41
【问题描述】:

我正在尝试按照 Web 组装说明 (http://webassembly.org/getting-started/developers-guide/) 安装 emsdk。它在 OSX 上编译得很好,但是当我尝试在 Ubuntu 16.04 上构建它时遇到以下错误:

[ 94%] Built target llvm-lto2
[ 94%] Built target llvm-diff
[ 94%] Linking CXX executable ../../bin/llvm-c-test
collect2: error: ld returned 1 exit status
tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/build.make:425: recipe for target 'bin/llvm-c-test' failed
make[2]: *** [bin/llvm-c-test] Error 1
CMakeFiles/Makefile2:15474: recipe for target 'tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/all' failed
make[1]: *** [tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2
Build failed due to exception!
Working directory: /opt/emsdk/clang/fastcomp/build_incoming_64
Command '['make', '-j1']' returned non-zero exit status 2
Installation failed!

有人知道怎么回事吗?

【问题讨论】:

    标签: ubuntu build emscripten webassembly


    【解决方案1】:

    对我来说,构建 emsdk 时的主要问题是交换,因为它看起来像安装脚本检测到 4 个逻辑处理器内核并启动 3 线程编译。当一切都编译好后,似乎同时启动了几个链接器进程 (ld),它们耗尽了我的 8 Gb RAM(至少在同时运行具有许多选项卡的 Firefox 时)。系统变得无响应,我必须停止使用它并等待或终止 ld 进程之一,然后在我的情况下,其他两个将完成链接,虽然安装会失败,但当我重新运行它时,要链接的二进制文件少了 2 个:)。

    我试图在不使用交换的情况下模拟内存耗尽

    $ ulimit -v 2000000
    $ ./emsdk install sdk-incoming-64bit
    

    得到了同样的错误collect2: error: ld returned 1 exit status,但在它之前有类似/usr/bin/ld: failed to set dynamic section sizes: Memory exhausted的东西。

    我完全不确定您是否确实遇到了这个问题(尤其是因为您没有任何 Memory exhausted 消息并且您正在执行单线程编译 (make -j1)),但在ld 内存耗尽时。您可以重新运行安装,同时观察另一个终端上的 top 输出,检查空闲内存 + buff/cache 是否接近 0(just 接近 0 的空闲内存可能是美好的)。如果是这样,您可以尝试使用交换分区或文件。不幸的是,您不能使用终止 ld 进程之一的技巧,因为您已经只有单线程编译 (make -j1)。

    【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2016-12-08
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多