首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图在Ubuntu 16.04上构建emsdk时出错

试图在Ubuntu 16.04上构建emsdk时出错
EN

Stack Overflow用户
提问于 2017-08-10 02:36:41
回答 1查看 235关注 0票数 1

我试图按照web程序集指令(http://webassembly.org/getting-started/developers-guide/)来安装emsdk。它在OSX上都编译得很好,但是当我试图在Ubuntu16.04上构建它时,我遇到了以下错误:

代码语言:javascript
复制
[ 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!

有人知道这是怎么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-02 16:09:31

对我来说,构建emsdk时的主要问题是交换,因为它看起来像是安装脚本检测到4个逻辑处理器核,并开始3线程编译。当编译所有内容时,几个链接器进程(ld)似乎同时启动,它们耗尽了我的8GB内存(至少当火狐同时运行多个选项卡时)。系统变得没有响应性,我不得不停止使用它,等待或终止一个ld进程,在我的例子中,另外两个进程将完成链接,尽管安装将失败,但当我重新运行它时,链接的二进制文件将减少2个)。

我尝试过模拟内存耗尽,而不需要用

代码语言:javascript
复制
$ 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(几乎为0的只是空闲的mem可能很好)。如果是这样,您可以尝试使用交换分区或文件。不幸的是,您不能使用终止一个ld进程的技巧,因为您已经只有单线程编译(make -j1)了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45603545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档